diff options
Diffstat (limited to 'libraries/spongycastle/core/src/main/java/org/spongycastle/asn1/ua/DSTU4145Params.java')
-rw-r--r-- | libraries/spongycastle/core/src/main/java/org/spongycastle/asn1/ua/DSTU4145Params.java | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/libraries/spongycastle/core/src/main/java/org/spongycastle/asn1/ua/DSTU4145Params.java b/libraries/spongycastle/core/src/main/java/org/spongycastle/asn1/ua/DSTU4145Params.java new file mode 100644 index 000000000..d6c60f8be --- /dev/null +++ b/libraries/spongycastle/core/src/main/java/org/spongycastle/asn1/ua/DSTU4145Params.java @@ -0,0 +1,121 @@ +package org.spongycastle.asn1.ua; + +import org.spongycastle.asn1.ASN1EncodableVector; +import org.spongycastle.asn1.ASN1Object; +import org.spongycastle.asn1.ASN1ObjectIdentifier; +import org.spongycastle.asn1.ASN1OctetString; +import org.spongycastle.asn1.ASN1Primitive; +import org.spongycastle.asn1.ASN1Sequence; +import org.spongycastle.asn1.DEROctetString; +import org.spongycastle.asn1.DERSequence; + +public class DSTU4145Params + extends ASN1Object +{ + private static final byte DEFAULT_DKE[] = { + (byte)0xa9, (byte)0xd6, (byte)0xeb, 0x45, (byte)0xf1, 0x3c, 0x70, (byte)0x82, + (byte)0x80, (byte)0xc4, (byte)0x96, 0x7b, 0x23, 0x1f, 0x5e, (byte)0xad, + (byte)0xf6, 0x58, (byte)0xeb, (byte)0xa4, (byte)0xc0, 0x37, 0x29, 0x1d, + 0x38, (byte)0xd9, 0x6b, (byte)0xf0, 0x25, (byte)0xca, 0x4e, 0x17, + (byte)0xf8, (byte)0xe9, 0x72, 0x0d, (byte)0xc6, 0x15, (byte)0xb4, 0x3a, + 0x28, (byte)0x97, 0x5f, 0x0b, (byte)0xc1, (byte)0xde, (byte)0xa3, 0x64, + 0x38, (byte)0xb5, 0x64, (byte)0xea, 0x2c, 0x17, (byte)0x9f, (byte)0xd0, + 0x12, 0x3e, 0x6d, (byte)0xb8, (byte)0xfa, (byte)0xc5, 0x79, 0x04}; + + + private ASN1ObjectIdentifier namedCurve; + private DSTU4145ECBinary ecbinary; + private byte[] dke = DEFAULT_DKE; + + public DSTU4145Params(ASN1ObjectIdentifier namedCurve) + { + this.namedCurve = namedCurve; + } + + public DSTU4145Params(DSTU4145ECBinary ecbinary) + { + this.ecbinary = ecbinary; + } + + public boolean isNamedCurve() + { + return namedCurve != null; + } + + public DSTU4145ECBinary getECBinary() + { + return ecbinary; + } + + public byte[] getDKE() + { + return dke; + } + + public static byte[] getDefaultDKE() + { + return DEFAULT_DKE; + } + + public ASN1ObjectIdentifier getNamedCurve() + { + return namedCurve; + } + + public static DSTU4145Params getInstance(Object obj) + { + if (obj instanceof DSTU4145Params) + { + return (DSTU4145Params)obj; + } + + if (obj != null) + { + ASN1Sequence seq = ASN1Sequence.getInstance(obj); + DSTU4145Params params; + + if (seq.getObjectAt(0) instanceof ASN1ObjectIdentifier) + { + params = new DSTU4145Params(ASN1ObjectIdentifier.getInstance(seq.getObjectAt(0))); + } + else + { + params = new DSTU4145Params(DSTU4145ECBinary.getInstance(seq.getObjectAt(0))); + } + + if (seq.size() == 2) + { + params.dke = ASN1OctetString.getInstance(seq.getObjectAt(1)).getOctets(); + if (params.dke.length != DSTU4145Params.DEFAULT_DKE.length) + { + throw new IllegalArgumentException("object parse error"); + } + } + + return params; + } + + throw new IllegalArgumentException("object parse error"); + } + + public ASN1Primitive toASN1Primitive() + { + ASN1EncodableVector v = new ASN1EncodableVector(); + + if (namedCurve != null) + { + v.add(namedCurve); + } + else + { + v.add(ecbinary); + } + + if (!org.spongycastle.util.Arrays.areEqual(dke, DEFAULT_DKE)) + { + v.add(new DEROctetString(dke)); + } + + return new DERSequence(v); + } +} |