Hex Artifact Content
Not logged in

Artifact 4031e8a4ab7516eb70a302900949340dbe4d5c44:


0000: 70 61 63 6b 61 67 65 20 6f 72 67 2e 69 6e 74 65  package org.inte
0010: 72 6c 65 64 67 65 72 2e 63 6f 64 65 63 73 2e 6f  rledger.codecs.o
0020: 65 72 2e 69 6c 70 3b 0a 0a 69 6d 70 6f 72 74 20  er.ilp;..import 
0030: 6f 72 67 2e 69 6e 74 65 72 6c 65 64 67 65 72 2e  org.interledger.
0040: 63 6f 64 65 63 73 2e 43 6f 64 65 63 3b 0a 69 6d  codecs.Codec;.im
0050: 70 6f 72 74 20 6f 72 67 2e 69 6e 74 65 72 6c 65  port org.interle
0060: 64 67 65 72 2e 63 6f 64 65 63 73 2e 43 6f 64 65  dger.codecs.Code
0070: 63 43 6f 6e 74 65 78 74 3b 0a 69 6d 70 6f 72 74  cContext;.import
0080: 20 6f 72 67 2e 69 6e 74 65 72 6c 65 64 67 65 72   org.interledger
0090: 2e 63 6f 64 65 63 73 2e 46 75 6c 66 69 6c 6c 6d  .codecs.Fulfillm
00a0: 65 6e 74 43 6f 64 65 63 3b 0a 69 6d 70 6f 72 74  entCodec;.import
00b0: 20 6f 72 67 2e 69 6e 74 65 72 6c 65 64 67 65 72   org.interledger
00c0: 2e 63 6f 64 65 63 73 2e 6f 65 72 2e 4f 65 72 55  .codecs.oer.OerU
00d0: 69 6e 74 32 35 36 43 6f 64 65 63 2e 4f 65 72 55  int256Codec.OerU
00e0: 69 6e 74 32 35 36 3b 0a 69 6d 70 6f 72 74 20 6f  int256;.import o
00f0: 72 67 2e 69 6e 74 65 72 6c 65 64 67 65 72 2e 63  rg.interledger.c
0100: 72 79 70 74 6f 63 6f 6e 64 69 74 69 6f 6e 73 2e  ryptoconditions.
0110: 46 75 6c 66 69 6c 6c 6d 65 6e 74 3b 0a 69 6d 70  Fulfillment;.imp
0120: 6f 72 74 20 6f 72 67 2e 69 6e 74 65 72 6c 65 64  ort org.interled
0130: 67 65 72 2e 63 72 79 70 74 6f 63 6f 6e 64 69 74  ger.cryptocondit
0140: 69 6f 6e 73 2e 50 72 65 69 6d 61 67 65 53 68 61  ions.PreimageSha
0150: 32 35 36 46 75 6c 66 69 6c 6c 6d 65 6e 74 3b 0a  256Fulfillment;.
0160: 0a 69 6d 70 6f 72 74 20 6a 61 76 61 2e 69 6f 2e  .import java.io.
0170: 49 4f 45 78 63 65 70 74 69 6f 6e 3b 0a 69 6d 70  IOException;.imp
0180: 6f 72 74 20 6a 61 76 61 2e 69 6f 2e 49 6e 70 75  ort java.io.Inpu
0190: 74 53 74 72 65 61 6d 3b 0a 69 6d 70 6f 72 74 20  tStream;.import 
01a0: 6a 61 76 61 2e 69 6f 2e 4f 75 74 70 75 74 53 74  java.io.OutputSt
01b0: 72 65 61 6d 3b 0a 69 6d 70 6f 72 74 20 6a 61 76  ream;.import jav
01c0: 61 2e 75 74 69 6c 2e 42 61 73 65 36 34 3b 0a 69  a.util.Base64;.i
01d0: 6d 70 6f 72 74 20 6a 61 76 61 2e 75 74 69 6c 2e  mport java.util.
01e0: 4f 62 6a 65 63 74 73 3b 0a 0a 2f 2a 2a 0a 20 2a  Objects;../**. *
01f0: 20 41 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69   An implementati
0200: 6f 6e 20 6f 66 20 7b 40 6c 69 6e 6b 20 43 6f 64  on of {@link Cod
0210: 65 63 7d 20 74 68 61 74 20 72 65 61 64 73 20 61  ec} that reads a
0220: 6e 64 20 77 72 69 74 65 73 20 69 6e 73 74 61 6e  nd writes instan
0230: 63 65 73 20 6f 66 20 7b 40 6c 69 6e 6b 20 46 75  ces of {@link Fu
0240: 6c 66 69 6c 6c 6d 65 6e 74 7d 2e 0a 20 2a 2f 0a  lfillment}.. */.
0250: 70 75 62 6c 69 63 20 63 6c 61 73 73 20 46 75 6c  public class Ful
0260: 66 69 6c 6c 6d 65 6e 74 4f 65 72 43 6f 64 65 63  fillmentOerCodec
0270: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 46 75 6c 66   implements Fulf
0280: 69 6c 6c 6d 65 6e 74 43 6f 64 65 63 20 7b 0a 0a  illmentCodec {..
0290: 20 20 40 4f 76 65 72 72 69 64 65 0a 20 20 70 75    @Override.  pu
02a0: 62 6c 69 63 20 46 75 6c 66 69 6c 6c 6d 65 6e 74  blic Fulfillment
02b0: 20 72 65 61 64 28 66 69 6e 61 6c 20 43 6f 64 65   read(final Code
02c0: 63 43 6f 6e 74 65 78 74 20 63 6f 6e 74 65 78 74  cContext context
02d0: 2c 20 66 69 6e 61 6c 20 49 6e 70 75 74 53 74 72  , final InputStr
02e0: 65 61 6d 20 69 6e 70 75 74 53 74 72 65 61 6d 29  eam inputStream)
02f0: 0a 20 20 20 20 20 20 74 68 72 6f 77 73 20 49 4f  .      throws IO
0300: 45 78 63 65 70 74 69 6f 6e 20 7b 0a 20 20 20 20  Exception {.    
0310: 4f 62 6a 65 63 74 73 2e 72 65 71 75 69 72 65 4e  Objects.requireN
0320: 6f 6e 4e 75 6c 6c 28 63 6f 6e 74 65 78 74 29 3b  onNull(context);
0330: 0a 20 20 20 20 4f 62 6a 65 63 74 73 2e 72 65 71  .    Objects.req
0340: 75 69 72 65 4e 6f 6e 4e 75 6c 6c 28 69 6e 70 75  uireNonNull(inpu
0350: 74 53 74 72 65 61 6d 29 3b 0a 20 20 20 20 66 69  tStream);.    fi
0360: 6e 61 6c 20 62 79 74 65 5b 5d 20 76 61 6c 75 65  nal byte[] value
0370: 20 3d 20 63 6f 6e 74 65 78 74 2e 72 65 61 64 28   = context.read(
0380: 4f 65 72 55 69 6e 74 32 35 36 2e 63 6c 61 73 73  OerUint256.class
0390: 2c 20 69 6e 70 75 74 53 74 72 65 61 6d 29 0a 20  , inputStream). 
03a0: 20 20 20 20 20 20 20 2e 67 65 74 56 61 6c 75 65         .getValue
03b0: 28 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 6e  ();.    return n
03c0: 65 77 20 50 72 65 69 6d 61 67 65 53 68 61 32 35  ew PreimageSha25
03d0: 36 46 75 6c 66 69 6c 6c 6d 65 6e 74 28 76 61 6c  6Fulfillment(val
03e0: 75 65 29 3b 0a 20 20 7d 0a 0a 20 20 40 4f 76 65  ue);.  }..  @Ove
03f0: 72 72 69 64 65 0a 20 20 70 75 62 6c 69 63 20 76  rride.  public v
0400: 6f 69 64 20 77 72 69 74 65 28 66 69 6e 61 6c 20  oid write(final 
0410: 43 6f 64 65 63 43 6f 6e 74 65 78 74 20 63 6f 6e  CodecContext con
0420: 74 65 78 74 2c 20 66 69 6e 61 6c 20 46 75 6c 66  text, final Fulf
0430: 69 6c 6c 6d 65 6e 74 20 69 6e 73 74 61 6e 63 65  illment instance
0440: 2c 0a 20 20 20 20 20 20 66 69 6e 61 6c 20 4f 75  ,.      final Ou
0450: 74 70 75 74 53 74 72 65 61 6d 20 6f 75 74 70 75  tputStream outpu
0460: 74 53 74 72 65 61 6d 29 20 74 68 72 6f 77 73 20  tStream) throws 
0470: 49 4f 45 78 63 65 70 74 69 6f 6e 20 7b 0a 20 20  IOException {.  
0480: 20 20 4f 62 6a 65 63 74 73 2e 72 65 71 75 69 72    Objects.requir
0490: 65 4e 6f 6e 4e 75 6c 6c 28 63 6f 6e 74 65 78 74  eNonNull(context
04a0: 29 3b 0a 20 20 20 20 4f 62 6a 65 63 74 73 2e 72  );.    Objects.r
04b0: 65 71 75 69 72 65 4e 6f 6e 4e 75 6c 6c 28 69 6e  equireNonNull(in
04c0: 73 74 61 6e 63 65 29 3b 0a 20 20 20 20 4f 62 6a  stance);.    Obj
04d0: 65 63 74 73 2e 72 65 71 75 69 72 65 4e 6f 6e 4e  ects.requireNonN
04e0: 75 6c 6c 28 6f 75 74 70 75 74 53 74 72 65 61 6d  ull(outputStream
04f0: 29 3b 0a 0a 20 20 20 20 2f 2f 54 4f 44 4f 20 52  );..    //TODO R
0500: 65 76 69 65 77 20 61 66 74 65 72 20 68 74 74 70  eview after http
0510: 73 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f 69  s://github.com/i
0520: 6e 74 65 72 6c 65 64 67 65 72 2f 6a 61 76 61 2d  nterledger/java-
0530: 63 72 79 70 74 6f 2d 63 6f 6e 64 69 74 69 6f 6e  crypto-condition
0540: 73 2f 69 73 73 75 65 73 2f 37 35 20 69 73 20 63  s/issues/75 is c
0550: 6c 6f 73 65 64 0a 20 20 20 20 69 66 20 28 69 6e  losed.    if (in
0560: 73 74 61 6e 63 65 20 69 6e 73 74 61 6e 63 65 6f  stance instanceo
0570: 66 20 50 72 65 69 6d 61 67 65 53 68 61 32 35 36  f PreimageSha256
0580: 46 75 6c 66 69 6c 6c 6d 65 6e 74 29 20 7b 0a 20  Fulfillment) {. 
0590: 20 20 20 20 20 50 72 65 69 6d 61 67 65 53 68 61       PreimageSha
05a0: 32 35 36 46 75 6c 66 69 6c 6c 6d 65 6e 74 20 66  256Fulfillment f
05b0: 75 6c 66 69 6c 6c 6d 65 6e 74 20 3d 20 28 50 72  ulfillment = (Pr
05c0: 65 69 6d 61 67 65 53 68 61 32 35 36 46 75 6c 66  eimageSha256Fulf
05d0: 69 6c 6c 6d 65 6e 74 29 20 69 6e 73 74 61 6e 63  illment) instanc
05e0: 65 3b 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20  e;.      byte[] 
05f0: 70 72 65 69 6d 61 67 65 20 3d 20 42 61 73 65 36  preimage = Base6
0600: 34 2e 67 65 74 55 72 6c 44 65 63 6f 64 65 72 28  4.getUrlDecoder(
0610: 29 2e 64 65 63 6f 64 65 28 66 75 6c 66 69 6c 6c  ).decode(fulfill
0620: 6d 65 6e 74 2e 67 65 74 50 72 65 69 6d 61 67 65  ment.getPreimage
0630: 28 29 29 3b 0a 20 20 20 20 20 20 63 6f 6e 74 65  ());.      conte
0640: 78 74 2e 77 72 69 74 65 28 4f 65 72 55 69 6e 74  xt.write(OerUint
0650: 32 35 36 2e 63 6c 61 73 73 2c 20 6e 65 77 20 4f  256.class, new O
0660: 65 72 55 69 6e 74 32 35 36 28 70 72 65 69 6d 61  erUint256(preima
0670: 67 65 29 2c 20 6f 75 74 70 75 74 53 74 72 65 61  ge), outputStrea
0680: 6d 29 3b 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b  m);.    } else {
0690: 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77  .      throw new
06a0: 20 49 6c 6c 65 67 61 6c 41 72 67 75 6d 65 6e 74   IllegalArgument
06b0: 45 78 63 65 70 74 69 6f 6e 28 22 4f 6e 6c 79 20  Exception("Only 
06c0: 50 72 65 69 6d 61 67 65 53 68 61 32 35 36 46 75  PreimageSha256Fu
06d0: 6c 66 69 6c 6c 6d 65 6e 74 20 69 6e 73 74 61 6e  lfillment instan
06e0: 63 65 73 20 63 61 6e 20 62 65 20 65 6e 63 6f 64  ces can be encod
06f0: 65 64 22 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 7d  ed");.    }..  }
0700: 0a 0a 7d 0a                                      ..}.