Browse Source
* commit 'a3d3fec4e714ee422dde814225a530aa2788a5b6': DEC-19773 refactor: itext适配新bouncycastle DEC-19773 refactor: 升级bouncycastle库 REPORT-55330 修复Bitmap实现bugrelease/10.0
superman
3 years ago
1153 changed files with 18445 additions and 144892 deletions
@ -1,2 +1,2 @@ |
|||||||
版本:1.64<br> |
版本:1.67<br> |
||||||
源码:https://www.bouncycastle.org/latest_releases.html<br> |
源码:https://www.bouncycastle.org/latest_releases.html<br> |
@ -1,144 +0,0 @@ |
|||||||
package com.fr.third.org.bouncycastle.asn1; |
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream; |
|
||||||
import java.io.IOException; |
|
||||||
import java.util.Enumeration; |
|
||||||
import java.util.Vector; |
|
||||||
|
|
||||||
/** |
|
||||||
* @deprecated use BEROctetString |
|
||||||
*/ |
|
||||||
public class BERConstructedOctetString |
|
||||||
extends BEROctetString |
|
||||||
{ |
|
||||||
private static final int MAX_LENGTH = 1000; |
|
||||||
|
|
||||||
/** |
|
||||||
* convert a vector of octet strings into a single byte string |
|
||||||
*/ |
|
||||||
static private byte[] toBytes( |
|
||||||
Vector octs) |
|
||||||
{ |
|
||||||
ByteArrayOutputStream bOut = new ByteArrayOutputStream(); |
|
||||||
|
|
||||||
for (int i = 0; i != octs.size(); i++) |
|
||||||
{ |
|
||||||
try |
|
||||||
{ |
|
||||||
DEROctetString o = (DEROctetString)octs.elementAt(i); |
|
||||||
|
|
||||||
bOut.write(o.getOctets()); |
|
||||||
} |
|
||||||
catch (ClassCastException e) |
|
||||||
{ |
|
||||||
throw new IllegalArgumentException(octs.elementAt(i).getClass().getName() + " found in input should only contain DEROctetString"); |
|
||||||
} |
|
||||||
catch (IOException e) |
|
||||||
{ |
|
||||||
throw new IllegalArgumentException("exception converting octets " + e.toString()); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return bOut.toByteArray(); |
|
||||||
} |
|
||||||
|
|
||||||
private Vector octs; |
|
||||||
|
|
||||||
/** |
|
||||||
* @param string the octets making up the octet string. |
|
||||||
*/ |
|
||||||
public BERConstructedOctetString( |
|
||||||
byte[] string) |
|
||||||
{ |
|
||||||
super(string); |
|
||||||
} |
|
||||||
|
|
||||||
public BERConstructedOctetString( |
|
||||||
Vector octs) |
|
||||||
{ |
|
||||||
super(toBytes(octs)); |
|
||||||
|
|
||||||
this.octs = octs; |
|
||||||
} |
|
||||||
|
|
||||||
public BERConstructedOctetString( |
|
||||||
ASN1Primitive obj) |
|
||||||
{ |
|
||||||
super(toByteArray(obj)); |
|
||||||
} |
|
||||||
|
|
||||||
private static byte[] toByteArray(ASN1Primitive obj) |
|
||||||
{ |
|
||||||
try |
|
||||||
{ |
|
||||||
return obj.getEncoded(); |
|
||||||
} |
|
||||||
catch (IOException e) |
|
||||||
{ |
|
||||||
throw new IllegalArgumentException("Unable to encode object"); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public BERConstructedOctetString( |
|
||||||
ASN1Encodable obj) |
|
||||||
{ |
|
||||||
this(obj.toASN1Primitive()); |
|
||||||
} |
|
||||||
|
|
||||||
public byte[] getOctets() |
|
||||||
{ |
|
||||||
return string; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* return the DER octets that make up this string. |
|
||||||
*/ |
|
||||||
public Enumeration getObjects() |
|
||||||
{ |
|
||||||
if (octs == null) |
|
||||||
{ |
|
||||||
return generateOcts().elements(); |
|
||||||
} |
|
||||||
|
|
||||||
return octs.elements(); |
|
||||||
} |
|
||||||
|
|
||||||
private Vector generateOcts() |
|
||||||
{ |
|
||||||
Vector vec = new Vector(); |
|
||||||
for (int i = 0; i < string.length; i += MAX_LENGTH) |
|
||||||
{ |
|
||||||
int end; |
|
||||||
|
|
||||||
if (i + MAX_LENGTH > string.length) |
|
||||||
{ |
|
||||||
end = string.length; |
|
||||||
} |
|
||||||
else |
|
||||||
{ |
|
||||||
end = i + MAX_LENGTH; |
|
||||||
} |
|
||||||
|
|
||||||
byte[] nStr = new byte[end - i]; |
|
||||||
|
|
||||||
System.arraycopy(string, i, nStr, 0, nStr.length); |
|
||||||
|
|
||||||
vec.addElement(new DEROctetString(nStr)); |
|
||||||
} |
|
||||||
|
|
||||||
return vec; |
|
||||||
} |
|
||||||
|
|
||||||
public static BEROctetString fromSequence(ASN1Sequence seq) |
|
||||||
{ |
|
||||||
Vector v = new Vector(); |
|
||||||
Enumeration e = seq.getObjects(); |
|
||||||
|
|
||||||
while (e.hasMoreElements()) |
|
||||||
{ |
|
||||||
v.addElement(e.nextElement()); |
|
||||||
} |
|
||||||
|
|
||||||
return new BERConstructedOctetString(v); |
|
||||||
} |
|
||||||
} |
|
@ -1,18 +0,0 @@ |
|||||||
package com.fr.third.org.bouncycastle.asn1; |
|
||||||
|
|
||||||
/** |
|
||||||
* a general class for building up a vector of DER encodable objects - |
|
||||||
* this will eventually be superseded by ASN1EncodableVector so you should |
|
||||||
* use that class in preference. |
|
||||||
*/ |
|
||||||
public class DEREncodableVector |
|
||||||
extends ASN1EncodableVector |
|
||||||
{ |
|
||||||
/** |
|
||||||
* @deprecated use ASN1EncodableVector instead. |
|
||||||
*/ |
|
||||||
public DEREncodableVector() |
|
||||||
{ |
|
||||||
|
|
||||||
} |
|
||||||
} |
|
@ -1,37 +0,0 @@ |
|||||||
package com.fr.third.org.bouncycastle.asn1; |
|
||||||
|
|
||||||
import java.math.BigInteger; |
|
||||||
|
|
||||||
/** |
|
||||||
* @deprecated Use ASN1Enumerated instead of this. |
|
||||||
*/ |
|
||||||
public class DEREnumerated |
|
||||||
extends ASN1Enumerated |
|
||||||
{ |
|
||||||
/** |
|
||||||
* @param bytes the value of this enumerated as an encoded BigInteger (signed). |
|
||||||
* @deprecated use ASN1Enumerated |
|
||||||
*/ |
|
||||||
DEREnumerated(byte[] bytes) |
|
||||||
{ |
|
||||||
super(bytes); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* @param value the value of this enumerated. |
|
||||||
* @deprecated use ASN1Enumerated |
|
||||||
*/ |
|
||||||
public DEREnumerated(BigInteger value) |
|
||||||
{ |
|
||||||
super(value); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* @param value the value of this enumerated. |
|
||||||
* @deprecated use ASN1Enumerated |
|
||||||
*/ |
|
||||||
public DEREnumerated(int value) |
|
||||||
{ |
|
||||||
super(value); |
|
||||||
} |
|
||||||
} |
|
@ -1,30 +0,0 @@ |
|||||||
package com.fr.third.org.bouncycastle.asn1; |
|
||||||
|
|
||||||
import java.math.BigInteger; |
|
||||||
|
|
||||||
/** |
|
||||||
* @deprecated Use ASN1Integer instead of this, |
|
||||||
*/ |
|
||||||
public class DERInteger |
|
||||||
extends ASN1Integer |
|
||||||
{ |
|
||||||
/** |
|
||||||
* Constructor from a byte array containing a signed representation of the number. |
|
||||||
* |
|
||||||
* @param bytes a byte array containing the signed number.A copy is made of the byte array. |
|
||||||
*/ |
|
||||||
public DERInteger(byte[] bytes) |
|
||||||
{ |
|
||||||
super(bytes, true); |
|
||||||
} |
|
||||||
|
|
||||||
public DERInteger(BigInteger value) |
|
||||||
{ |
|
||||||
super(value); |
|
||||||
} |
|
||||||
|
|
||||||
public DERInteger(long value) |
|
||||||
{ |
|
||||||
super(value); |
|
||||||
} |
|
||||||
} |
|
@ -1,24 +0,0 @@ |
|||||||
package com.fr.third.org.bouncycastle.asn1; |
|
||||||
|
|
||||||
/** |
|
||||||
* |
|
||||||
* @deprecated Use ASN1ObjectIdentifier instead of this, |
|
||||||
*/ |
|
||||||
public class DERObjectIdentifier |
|
||||||
extends ASN1ObjectIdentifier |
|
||||||
{ |
|
||||||
public DERObjectIdentifier(String identifier) |
|
||||||
{ |
|
||||||
super(identifier); |
|
||||||
} |
|
||||||
|
|
||||||
DERObjectIdentifier(byte[] bytes) |
|
||||||
{ |
|
||||||
super(bytes); |
|
||||||
} |
|
||||||
|
|
||||||
DERObjectIdentifier(ASN1ObjectIdentifier oid, String branch) |
|
||||||
{ |
|
||||||
super(oid, branch); |
|
||||||
} |
|
||||||
} |
|
@ -1,58 +0,0 @@ |
|||||||
package com.fr.third.org.bouncycastle.asn1; |
|
||||||
|
|
||||||
import java.io.IOException; |
|
||||||
|
|
||||||
/** |
|
||||||
* @deprecated Use DLSequenceParser instead |
|
||||||
*/ |
|
||||||
public class DERSequenceParser |
|
||||||
implements ASN1SequenceParser |
|
||||||
{ |
|
||||||
private ASN1StreamParser _parser; |
|
||||||
|
|
||||||
DERSequenceParser(ASN1StreamParser parser) |
|
||||||
{ |
|
||||||
this._parser = parser; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Return the next object in the SEQUENCE. |
|
||||||
* |
|
||||||
* @return next object in SEQUENCE. |
|
||||||
* @throws IOException if there is an issue loading the object. |
|
||||||
*/ |
|
||||||
public ASN1Encodable readObject() |
|
||||||
throws IOException |
|
||||||
{ |
|
||||||
return _parser.readObject(); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Return an in memory, encodable, representation of the SEQUENCE. |
|
||||||
* |
|
||||||
* @return a DERSequence. |
|
||||||
* @throws IOException if there is an issue loading the data. |
|
||||||
*/ |
|
||||||
public ASN1Primitive getLoadedObject() |
|
||||||
throws IOException |
|
||||||
{ |
|
||||||
return new DLSequence(_parser.readVector()); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Return a DERSequence representing this parser and its contents. |
|
||||||
* |
|
||||||
* @return a DERSequence. |
|
||||||
*/ |
|
||||||
public ASN1Primitive toASN1Primitive() |
|
||||||
{ |
|
||||||
try |
|
||||||
{ |
|
||||||
return getLoadedObject(); |
|
||||||
} |
|
||||||
catch (IOException e) |
|
||||||
{ |
|
||||||
throw new IllegalStateException(e.getMessage()); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,58 +0,0 @@ |
|||||||
package com.fr.third.org.bouncycastle.asn1; |
|
||||||
|
|
||||||
import java.io.IOException; |
|
||||||
|
|
||||||
/** |
|
||||||
* @deprecated Use DLSetParser instead |
|
||||||
*/ |
|
||||||
public class DERSetParser |
|
||||||
implements ASN1SetParser |
|
||||||
{ |
|
||||||
private ASN1StreamParser _parser; |
|
||||||
|
|
||||||
DERSetParser(ASN1StreamParser parser) |
|
||||||
{ |
|
||||||
this._parser = parser; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Return the next object in the SET. |
|
||||||
* |
|
||||||
* @return next object in SET. |
|
||||||
* @throws IOException if there is an issue loading the object. |
|
||||||
*/ |
|
||||||
public ASN1Encodable readObject() |
|
||||||
throws IOException |
|
||||||
{ |
|
||||||
return _parser.readObject(); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Return an in memory, encodable, representation of the SET. |
|
||||||
* |
|
||||||
* @return a DERSet. |
|
||||||
* @throws IOException if there is an issue loading the data. |
|
||||||
*/ |
|
||||||
public ASN1Primitive getLoadedObject() |
|
||||||
throws IOException |
|
||||||
{ |
|
||||||
return new DLSet(_parser.readVector()); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Return a DERSet representing this parser and its contents. |
|
||||||
* |
|
||||||
* @return a DERSet |
|
||||||
*/ |
|
||||||
public ASN1Primitive toASN1Primitive() |
|
||||||
{ |
|
||||||
try |
|
||||||
{ |
|
||||||
return getLoadedObject(); |
|
||||||
} |
|
||||||
catch (IOException e) |
|
||||||
{ |
|
||||||
throw new ASN1ParsingException(e.getMessage(), e); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,153 +0,0 @@ |
|||||||
package com.fr.third.org.bouncycastle.asn1; |
|
||||||
|
|
||||||
import java.io.IOException; |
|
||||||
|
|
||||||
import com.fr.third.org.bouncycastle.util.Arrays; |
|
||||||
import com.fr.third.org.bouncycastle.util.Strings; |
|
||||||
|
|
||||||
/** |
|
||||||
* DER T61String (also the teletex string) - a "modern" encapsulation that uses UTF-8. If at all possible, avoid this one! It's only for emergencies. |
|
||||||
* Use UTF8String instead. |
|
||||||
* @deprecated don't use this class, introduced in error, it will be removed. |
|
||||||
*/ |
|
||||||
public class DERT61UTF8String |
|
||||||
extends ASN1Primitive |
|
||||||
implements ASN1String |
|
||||||
{ |
|
||||||
private byte[] string; |
|
||||||
|
|
||||||
/** |
|
||||||
* return a T61 string from the passed in object. UTF-8 Encoding is assumed in this case. |
|
||||||
* |
|
||||||
* @param obj a DERT61UTF8String or an object that can be converted into one. |
|
||||||
* @throws IllegalArgumentException if the object cannot be converted. |
|
||||||
* @return a DERT61UTF8String instance, or null |
|
||||||
*/ |
|
||||||
public static DERT61UTF8String getInstance( |
|
||||||
Object obj) |
|
||||||
{ |
|
||||||
if (obj instanceof DERT61String) |
|
||||||
{ |
|
||||||
return new DERT61UTF8String(((DERT61String)obj).getOctets()); |
|
||||||
} |
|
||||||
|
|
||||||
if (obj == null || obj instanceof DERT61UTF8String) |
|
||||||
{ |
|
||||||
return (DERT61UTF8String)obj; |
|
||||||
} |
|
||||||
|
|
||||||
if (obj instanceof byte[]) |
|
||||||
{ |
|
||||||
try |
|
||||||
{ |
|
||||||
return new DERT61UTF8String(((DERT61String)fromByteArray((byte[])obj)).getOctets()); |
|
||||||
} |
|
||||||
catch (Exception e) |
|
||||||
{ |
|
||||||
throw new IllegalArgumentException("encoding error in getInstance: " + e.toString()); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
throw new IllegalArgumentException("illegal object in getInstance: " + obj.getClass().getName()); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* return an T61 String from a tagged object. UTF-8 encoding is assumed in this case. |
|
||||||
* |
|
||||||
* @param obj the tagged object holding the object we want |
|
||||||
* @param explicit true if the object is meant to be explicitly |
|
||||||
* tagged false otherwise. |
|
||||||
* @throws IllegalArgumentException if the tagged object cannot |
|
||||||
* be converted. |
|
||||||
* @return a DERT61UTF8String instance, or null |
|
||||||
*/ |
|
||||||
public static DERT61UTF8String getInstance( |
|
||||||
ASN1TaggedObject obj, |
|
||||||
boolean explicit) |
|
||||||
{ |
|
||||||
ASN1Primitive o = obj.getObject(); |
|
||||||
|
|
||||||
if (explicit || o instanceof DERT61String || o instanceof DERT61UTF8String) |
|
||||||
{ |
|
||||||
return getInstance(o); |
|
||||||
} |
|
||||||
else |
|
||||||
{ |
|
||||||
return new DERT61UTF8String(ASN1OctetString.getInstance(o).getOctets()); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* basic constructor - string encoded as a sequence of bytes. |
|
||||||
*/ |
|
||||||
public DERT61UTF8String( |
|
||||||
byte[] string) |
|
||||||
{ |
|
||||||
this.string = string; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* basic constructor - with string UTF8 conversion assumed. |
|
||||||
*/ |
|
||||||
public DERT61UTF8String( |
|
||||||
String string) |
|
||||||
{ |
|
||||||
this(Strings.toUTF8ByteArray(string)); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Decode the encoded string and return it, UTF8 assumed. |
|
||||||
* |
|
||||||
* @return the decoded String |
|
||||||
*/ |
|
||||||
public String getString() |
|
||||||
{ |
|
||||||
return Strings.fromUTF8ByteArray(string); |
|
||||||
} |
|
||||||
|
|
||||||
public String toString() |
|
||||||
{ |
|
||||||
return getString(); |
|
||||||
} |
|
||||||
|
|
||||||
boolean isConstructed() |
|
||||||
{ |
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
int encodedLength() |
|
||||||
{ |
|
||||||
return 1 + StreamUtil.calculateBodyLength(string.length) + string.length; |
|
||||||
} |
|
||||||
|
|
||||||
void encode(ASN1OutputStream out, boolean withTag) throws IOException |
|
||||||
{ |
|
||||||
out.writeEncoded(withTag, BERTags.T61_STRING, string); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Return the encoded string as a byte array. |
|
||||||
* |
|
||||||
* @return the actual bytes making up the encoded body of the T61 string. |
|
||||||
*/ |
|
||||||
public byte[] getOctets() |
|
||||||
{ |
|
||||||
return Arrays.clone(string); |
|
||||||
} |
|
||||||
|
|
||||||
boolean asn1Equals( |
|
||||||
ASN1Primitive o) |
|
||||||
{ |
|
||||||
if (!(o instanceof DERT61UTF8String)) |
|
||||||
{ |
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
return Arrays.areEqual(string, ((DERT61UTF8String)o).string); |
|
||||||
} |
|
||||||
|
|
||||||
public int hashCode() |
|
||||||
{ |
|
||||||
return Arrays.hashCode(string); |
|
||||||
} |
|
||||||
} |
|
@ -1,9 +0,0 @@ |
|||||||
package com.fr.third.org.bouncycastle.asn1; |
|
||||||
|
|
||||||
/** |
|
||||||
* @deprecated use BERTags |
|
||||||
*/ |
|
||||||
public interface DERTags |
|
||||||
extends BERTags |
|
||||||
{ |
|
||||||
} |
|
@ -1,12 +1,60 @@ |
|||||||
package com.fr.third.org.bouncycastle.asn1; |
package com.fr.third.org.bouncycastle.asn1; |
||||||
|
|
||||||
|
import java.io.IOException; |
||||||
|
|
||||||
/** |
/** |
||||||
* Parser class for DL SEQUENCEs. |
* Parser class for DL SEQUENCEs. |
||||||
|
* |
||||||
|
* TODO The class is only publicly visible to support 'instanceof' checks; provide an alternative |
||||||
*/ |
*/ |
||||||
public class DLSequenceParser extends DERSequenceParser |
public class DLSequenceParser |
||||||
|
implements ASN1SequenceParser |
||||||
{ |
{ |
||||||
|
private ASN1StreamParser _parser; |
||||||
|
|
||||||
DLSequenceParser(ASN1StreamParser parser) |
DLSequenceParser(ASN1StreamParser parser) |
||||||
{ |
{ |
||||||
super(parser); |
this._parser = parser; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Return the next object in the SEQUENCE. |
||||||
|
* |
||||||
|
* @return next object in SEQUENCE. |
||||||
|
* @throws IOException if there is an issue loading the object. |
||||||
|
*/ |
||||||
|
public ASN1Encodable readObject() |
||||||
|
throws IOException |
||||||
|
{ |
||||||
|
return _parser.readObject(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Return an in memory, encodable, representation of the SEQUENCE. |
||||||
|
* |
||||||
|
* @return a DLSequence. |
||||||
|
* @throws IOException if there is an issue loading the data. |
||||||
|
*/ |
||||||
|
public ASN1Primitive getLoadedObject() |
||||||
|
throws IOException |
||||||
|
{ |
||||||
|
return new DLSequence(_parser.readVector()); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Return a DLSequence representing this parser and its contents. |
||||||
|
* |
||||||
|
* @return a DLSequence. |
||||||
|
*/ |
||||||
|
public ASN1Primitive toASN1Primitive() |
||||||
|
{ |
||||||
|
try |
||||||
|
{ |
||||||
|
return getLoadedObject(); |
||||||
|
} |
||||||
|
catch (IOException e) |
||||||
|
{ |
||||||
|
throw new IllegalStateException(e.getMessage()); |
||||||
|
} |
||||||
} |
} |
||||||
} |
} |
||||||
|
@ -1,12 +1,60 @@ |
|||||||
package com.fr.third.org.bouncycastle.asn1; |
package com.fr.third.org.bouncycastle.asn1; |
||||||
|
|
||||||
|
import java.io.IOException; |
||||||
|
|
||||||
/** |
/** |
||||||
* Parser class for DL SETs. |
* Parser class for DL SETs. |
||||||
|
* |
||||||
|
* TODO The class is only publicly visible to support 'instanceof' checks; provide an alternative |
||||||
*/ |
*/ |
||||||
public class DLSetParser extends DERSetParser |
public class DLSetParser |
||||||
|
implements ASN1SetParser |
||||||
{ |
{ |
||||||
|
private ASN1StreamParser _parser; |
||||||
|
|
||||||
DLSetParser(ASN1StreamParser parser) |
DLSetParser(ASN1StreamParser parser) |
||||||
{ |
{ |
||||||
super(parser); |
this._parser = parser; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Return the next object in the SET. |
||||||
|
* |
||||||
|
* @return next object in SET. |
||||||
|
* @throws IOException if there is an issue loading the object. |
||||||
|
*/ |
||||||
|
public ASN1Encodable readObject() |
||||||
|
throws IOException |
||||||
|
{ |
||||||
|
return _parser.readObject(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Return an in memory, encodable, representation of the SET. |
||||||
|
* |
||||||
|
* @return a DLSet. |
||||||
|
* @throws IOException if there is an issue loading the data. |
||||||
|
*/ |
||||||
|
public ASN1Primitive getLoadedObject() |
||||||
|
throws IOException |
||||||
|
{ |
||||||
|
return new DLSet(_parser.readVector()); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Return a DLSet representing this parser and its contents. |
||||||
|
* |
||||||
|
* @return a DLSet |
||||||
|
*/ |
||||||
|
public ASN1Primitive toASN1Primitive() |
||||||
|
{ |
||||||
|
try |
||||||
|
{ |
||||||
|
return getLoadedObject(); |
||||||
|
} |
||||||
|
catch (IOException e) |
||||||
|
{ |
||||||
|
throw new ASN1ParsingException(e.getMessage(), e); |
||||||
|
} |
||||||
} |
} |
||||||
} |
} |
||||||
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
Support classes for the French ANSSI EC curves. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
ASN.1 classes specific to the Bouncy Castle APIs. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
ASN.1 classes specific to the Bundesamt für Sicherheit in der Informationstechnik (BSI) standards. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
Support classes for Certificate Management over CMS (CMC) - RFC 5272 and RFC 6402. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
Support classes useful for encoding and supporting PKIX-CMP as described RFC 4210. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
Support classes for CMS ECC - RFC 5753/3278. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
Support classes useful for encoding and supporting Cryptographic Message Syntax as described in PKCS#7 and RFC 3369 (formerly RFC 2630). |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
Support classes useful for encoding and supporting PKIX-CRMF as described RFC 4211. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
Support classes for CRYPTO-PRO related objects - such as GOST identifiers. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
Support classes useful for encoding and processing Data Validation and Certification Server (DVCS) protocols as described in RFC 3029. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
ASN.1 classes specific to the Bundesamt für Sicherheit in der Informationstechnik (BSI) Technical Guideline Advanced Security Mechanisms for Machine Readable Travel Documents. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,6 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
Support classes useful for encoding and supporting [ESF] RFC3126 |
|
||||||
Electronic Signature Formats for long term electronic signatures. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
Support classes useful for encoding and supporting Enhanced Security Services for S/MIME as described RFC 2634 and RFC 5035. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
Support classes for Enrollment over Secure Transport (EST) - RFC 7030. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
Support classes for Chinese Standard (GM) standard curves and algorithms. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
ASN.1 classes specific to the GNU APIs and applications. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
ASN.1 classes specific to the Internet Assigned Numbers Authority (IANA). |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
ICAO ASN.1 classes for electronic passport. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -0,0 +1,22 @@ |
|||||||
|
package com.fr.third.org.bouncycastle.asn1.isara; |
||||||
|
|
||||||
|
import com.fr.third.org.bouncycastle.asn1.ASN1ObjectIdentifier; |
||||||
|
|
||||||
|
public interface IsaraObjectIdentifiers |
||||||
|
{ |
||||||
|
/* |
||||||
|
id-alg-xmss OBJECT IDENTIFIER ::= { itu-t(0) |
||||||
|
identified-organization(4) etsi(0) reserved(127) |
||||||
|
etsi-identified-organization(0) isara(15) algorithms(1) |
||||||
|
asymmetric(1) xmss(13) 0 } |
||||||
|
*/ |
||||||
|
static ASN1ObjectIdentifier id_alg_xmss = new ASN1ObjectIdentifier("0.4.0.127.0.15.1.1.13.0"); |
||||||
|
|
||||||
|
/* |
||||||
|
id-alg-xmssmt OBJECT IDENTIFIER ::= { itu-t(0) |
||||||
|
identified-organization(4) etsi(0) reserved(127) |
||||||
|
etsi-identified-organization(0) isara(15) algorithms(1) |
||||||
|
asymmetric(1) xmssmt(14) 0 } |
||||||
|
*/ |
||||||
|
static ASN1ObjectIdentifier id_alg_xmssmt = new ASN1ObjectIdentifier("0.4.0.127.0.15.1.1.14.0"); |
||||||
|
} |
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
Support classes for the ISIS-MTT profile for OCSP. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
Support classes for the ISIS-MTT Project. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
Support classes for the ISIS-MTT X.509 Certificate Extensions. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
Support classes for various ISO Standards. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
Support classes for the Korea Information Security Agency (KISA) standard - SEED algorithm. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
Support for Microsoft specific ASN.1 classes and object identifiers. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
Miscellaneous object identifiers and objects. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
Support classes useful for encoding objects used by mozilla. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -0,0 +1,114 @@ |
|||||||
|
package com.fr.third.org.bouncycastle.asn1.nist; |
||||||
|
|
||||||
|
import com.fr.third.org.bouncycastle.asn1.ASN1EncodableVector; |
||||||
|
import com.fr.third.org.bouncycastle.asn1.ASN1Integer; |
||||||
|
import com.fr.third.org.bouncycastle.asn1.ASN1Object; |
||||||
|
import com.fr.third.org.bouncycastle.asn1.ASN1OctetString; |
||||||
|
import com.fr.third.org.bouncycastle.asn1.ASN1Primitive; |
||||||
|
import com.fr.third.org.bouncycastle.asn1.ASN1Sequence; |
||||||
|
import com.fr.third.org.bouncycastle.asn1.DEROctetString; |
||||||
|
import com.fr.third.org.bouncycastle.asn1.DERSequence; |
||||||
|
import com.fr.third.org.bouncycastle.util.Arrays; |
||||||
|
|
||||||
|
/** |
||||||
|
* <pre> |
||||||
|
* KMACwithSHAKE128-params ::= SEQUENCE { |
||||||
|
* kMACOutputLength INTEGER DEFAULT 256, -- Output length in bits |
||||||
|
* customizationString OCTET STRING DEFAULT ''H |
||||||
|
* } |
||||||
|
* </pre> |
||||||
|
*/ |
||||||
|
public class KMACwithSHAKE128_params |
||||||
|
extends ASN1Object |
||||||
|
{ |
||||||
|
private static final byte[] EMPTY_STRING = new byte[0]; |
||||||
|
private static final int DEF_LENGTH = 256; |
||||||
|
|
||||||
|
private final int outputLength; |
||||||
|
private final byte[] customizationString; |
||||||
|
|
||||||
|
public KMACwithSHAKE128_params(int outputLength) |
||||||
|
{ |
||||||
|
this.outputLength = outputLength; |
||||||
|
this.customizationString = EMPTY_STRING; |
||||||
|
} |
||||||
|
|
||||||
|
public KMACwithSHAKE128_params(int outputLength, byte[] customizationString) |
||||||
|
{ |
||||||
|
this.outputLength = outputLength; |
||||||
|
this.customizationString = Arrays.clone(customizationString); |
||||||
|
} |
||||||
|
|
||||||
|
public static KMACwithSHAKE128_params getInstance(Object o) |
||||||
|
{ |
||||||
|
if (o instanceof KMACwithSHAKE128_params) |
||||||
|
{ |
||||||
|
return (KMACwithSHAKE128_params)o; |
||||||
|
} |
||||||
|
else if (o != null) |
||||||
|
{ |
||||||
|
return new KMACwithSHAKE128_params(ASN1Sequence.getInstance(o)); |
||||||
|
} |
||||||
|
|
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
private KMACwithSHAKE128_params(ASN1Sequence seq) |
||||||
|
{ |
||||||
|
if (seq.size() > 2) |
||||||
|
{ |
||||||
|
throw new IllegalArgumentException("sequence size greater than 2"); |
||||||
|
} |
||||||
|
|
||||||
|
if (seq.size() == 2) |
||||||
|
{ |
||||||
|
this.outputLength = ASN1Integer.getInstance(seq.getObjectAt(0)).intValueExact(); |
||||||
|
this.customizationString = Arrays.clone(ASN1OctetString.getInstance(seq.getObjectAt(1)).getOctets()); |
||||||
|
} |
||||||
|
else if (seq.size() == 1) |
||||||
|
{ |
||||||
|
if (seq.getObjectAt(0) instanceof ASN1Integer) |
||||||
|
{ |
||||||
|
this.outputLength = ASN1Integer.getInstance(seq.getObjectAt(0)).intValueExact(); |
||||||
|
this.customizationString = EMPTY_STRING; |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
this.outputLength = DEF_LENGTH; |
||||||
|
this.customizationString = Arrays.clone(ASN1OctetString.getInstance(seq.getObjectAt(0)).getOctets()); |
||||||
|
} |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
this.outputLength = DEF_LENGTH; |
||||||
|
this.customizationString = EMPTY_STRING; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public int getOutputLength() |
||||||
|
{ |
||||||
|
return outputLength; |
||||||
|
} |
||||||
|
|
||||||
|
public byte[] getCustomizationString() |
||||||
|
{ |
||||||
|
return Arrays.clone(customizationString); |
||||||
|
} |
||||||
|
|
||||||
|
public ASN1Primitive toASN1Primitive() |
||||||
|
{ |
||||||
|
ASN1EncodableVector v = new ASN1EncodableVector(); |
||||||
|
|
||||||
|
if (outputLength != DEF_LENGTH) |
||||||
|
{ |
||||||
|
v.add(new ASN1Integer(outputLength)); |
||||||
|
} |
||||||
|
|
||||||
|
if (customizationString.length != 0) |
||||||
|
{ |
||||||
|
v.add(new DEROctetString(getCustomizationString())); |
||||||
|
} |
||||||
|
|
||||||
|
return new DERSequence(v); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,114 @@ |
|||||||
|
package com.fr.third.org.bouncycastle.asn1.nist; |
||||||
|
|
||||||
|
import com.fr.third.org.bouncycastle.asn1.ASN1EncodableVector; |
||||||
|
import com.fr.third.org.bouncycastle.asn1.ASN1Integer; |
||||||
|
import com.fr.third.org.bouncycastle.asn1.ASN1Object; |
||||||
|
import com.fr.third.org.bouncycastle.asn1.ASN1OctetString; |
||||||
|
import com.fr.third.org.bouncycastle.asn1.ASN1Primitive; |
||||||
|
import com.fr.third.org.bouncycastle.asn1.ASN1Sequence; |
||||||
|
import com.fr.third.org.bouncycastle.asn1.DEROctetString; |
||||||
|
import com.fr.third.org.bouncycastle.asn1.DERSequence; |
||||||
|
import com.fr.third.org.bouncycastle.util.Arrays; |
||||||
|
|
||||||
|
/** |
||||||
|
* <pre> |
||||||
|
* KMACwithSHAKE256-params ::= SEQUENCE { |
||||||
|
* kMACOutputLength INTEGER DEFAULT 512, -- Output length in bits |
||||||
|
* customizationString OCTET STRING DEFAULT ''H |
||||||
|
* } |
||||||
|
* </pre> |
||||||
|
*/ |
||||||
|
public class KMACwithSHAKE256_params |
||||||
|
extends ASN1Object |
||||||
|
{ |
||||||
|
private static final byte[] EMPTY_STRING = new byte[0]; |
||||||
|
private static final int DEF_LENGTH = 512; |
||||||
|
|
||||||
|
private final int outputLength; |
||||||
|
private final byte[] customizationString; |
||||||
|
|
||||||
|
public KMACwithSHAKE256_params(int outputLength) |
||||||
|
{ |
||||||
|
this.outputLength = outputLength; |
||||||
|
this.customizationString = EMPTY_STRING; |
||||||
|
} |
||||||
|
|
||||||
|
public KMACwithSHAKE256_params(int outputLength, byte[] customizationString) |
||||||
|
{ |
||||||
|
this.outputLength = outputLength; |
||||||
|
this.customizationString = Arrays.clone(customizationString); |
||||||
|
} |
||||||
|
|
||||||
|
public static KMACwithSHAKE256_params getInstance(Object o) |
||||||
|
{ |
||||||
|
if (o instanceof KMACwithSHAKE256_params) |
||||||
|
{ |
||||||
|
return (KMACwithSHAKE256_params)o; |
||||||
|
} |
||||||
|
else if (o != null) |
||||||
|
{ |
||||||
|
return new KMACwithSHAKE256_params(ASN1Sequence.getInstance(o)); |
||||||
|
} |
||||||
|
|
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
private KMACwithSHAKE256_params(ASN1Sequence seq) |
||||||
|
{ |
||||||
|
if (seq.size() > 2) |
||||||
|
{ |
||||||
|
throw new IllegalArgumentException("sequence size greater than 2"); |
||||||
|
} |
||||||
|
|
||||||
|
if (seq.size() == 2) |
||||||
|
{ |
||||||
|
this.outputLength = ASN1Integer.getInstance(seq.getObjectAt(0)).intValueExact(); |
||||||
|
this.customizationString = Arrays.clone(ASN1OctetString.getInstance(seq.getObjectAt(1)).getOctets()); |
||||||
|
} |
||||||
|
else if (seq.size() == 1) |
||||||
|
{ |
||||||
|
if (seq.getObjectAt(0) instanceof ASN1Integer) |
||||||
|
{ |
||||||
|
this.outputLength = ASN1Integer.getInstance(seq.getObjectAt(0)).intValueExact(); |
||||||
|
this.customizationString = EMPTY_STRING; |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
this.outputLength = DEF_LENGTH; |
||||||
|
this.customizationString = Arrays.clone(ASN1OctetString.getInstance(seq.getObjectAt(0)).getOctets()); |
||||||
|
} |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
this.outputLength = DEF_LENGTH; |
||||||
|
this.customizationString = EMPTY_STRING; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public int getOutputLength() |
||||||
|
{ |
||||||
|
return outputLength; |
||||||
|
} |
||||||
|
|
||||||
|
public byte[] getCustomizationString() |
||||||
|
{ |
||||||
|
return Arrays.clone(customizationString); |
||||||
|
} |
||||||
|
|
||||||
|
public ASN1Primitive toASN1Primitive() |
||||||
|
{ |
||||||
|
ASN1EncodableVector v = new ASN1EncodableVector(); |
||||||
|
|
||||||
|
if (outputLength != DEF_LENGTH) |
||||||
|
{ |
||||||
|
v.add(new ASN1Integer(outputLength)); |
||||||
|
} |
||||||
|
|
||||||
|
if (customizationString.length != 0) |
||||||
|
{ |
||||||
|
v.add(new DEROctetString(getCustomizationString())); |
||||||
|
} |
||||||
|
|
||||||
|
return new DERSequence(v); |
||||||
|
} |
||||||
|
} |
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
Support classes for NIST related objects. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
Support classes algorithms from the Korean National Security Research Institute. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
ASN.1 classes relevant to the standards produced by Nippon Telegraph and Telephone. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
Support classes useful for encoding and supporting OCSP objects. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
Objects and OID for the support of ISO OIW. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
A library for parsing and writing ASN.1 objects. Support is provided for DER and BER encoding. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
Support classes useful for encoding and supporting the various RSA PKCS documents. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
Support classes algorithms from the Russian Federal Agency on Technical Regulating and Metrology - Rosstandart. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
Classes for support of the SEC standard for Elliptic Curve. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
Support classes useful for encoding and supporting S/MIME. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,5 +0,0 @@ |
|||||||
<html> |
|
||||||
<body bgcolor="#ffffff"> |
|
||||||
Support classes for TeleTrust related objects. |
|
||||||
</body> |
|
||||||
</html> |
|
@ -1,365 +0,0 @@ |
|||||||
package com.fr.third.org.bouncycastle.asn1.test; |
|
||||||
|
|
||||||
import java.math.BigInteger; |
|
||||||
|
|
||||||
import com.fr.third.org.bouncycastle.asn1.ASN1Enumerated; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.ASN1Integer; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.ASN1Sequence; |
|
||||||
import com.fr.third.org.bouncycastle.util.BigIntegers; |
|
||||||
import com.fr.third.org.bouncycastle.util.Properties; |
|
||||||
import com.fr.third.org.bouncycastle.util.encoders.Base64; |
|
||||||
import com.fr.third.org.bouncycastle.util.encoders.Hex; |
|
||||||
import com.fr.third.org.bouncycastle.util.test.SimpleTest; |
|
||||||
|
|
||||||
public class ASN1IntegerTest |
|
||||||
extends SimpleTest |
|
||||||
{ |
|
||||||
private static final byte[] suspectKey = Base64.decode( |
|
||||||
"MIGJAoGBAHNc+iExm94LUrJdPSJ4QJ9tDRuvaNmGVHpJ4X7a5zKI02v+2E7RotuiR2MHDJfVJkb9LUs2kb3XBlyENhtMLsbeH+3Muy3" + |
|
||||||
"hGDlh/mLJSh1s4c5jDKBRYOHom7Uc8wP0P2+zBCA+OEdikNDFBaP5PbR2Xq9okG2kPh35M2quAiMTAgMBAAE="); |
|
||||||
|
|
||||||
public String getName() |
|
||||||
{ |
|
||||||
return "ASN1Integer"; |
|
||||||
} |
|
||||||
|
|
||||||
public void performTest() |
|
||||||
throws Exception |
|
||||||
{ |
|
||||||
System.setProperty("com.fr.third.org.bouncycastle.asn1.allow_unsafe_integer", "true"); |
|
||||||
|
|
||||||
ASN1Sequence.getInstance(suspectKey); |
|
||||||
|
|
||||||
testValidEncodingSingleByte(); |
|
||||||
testValidEncodingMultiByte(); |
|
||||||
testInvalidEncoding_00(); |
|
||||||
testInvalidEncoding_ff(); |
|
||||||
testInvalidEncoding_00_32bits(); |
|
||||||
testInvalidEncoding_ff_32bits(); |
|
||||||
//testLooseInvalidValidEncoding_FF_32B();
|
|
||||||
//testLooseInvalidValidEncoding_zero_32B();
|
|
||||||
testLooseValidEncoding_zero_32BAligned(); |
|
||||||
testLooseValidEncoding_FF_32BAligned(); |
|
||||||
testLooseValidEncoding_FF_32BAligned_1not0(); |
|
||||||
testLooseValidEncoding_FF_32BAligned_2not0(); |
|
||||||
testOversizedEncoding(); |
|
||||||
|
|
||||||
System.setProperty("com.fr.third.org.bouncycastle.asn1.allow_unsafe_integer", "true"); |
|
||||||
|
|
||||||
new ASN1Integer(Hex.decode("ffda47bfc776bcd269da4832626ac332adfca6dd835e8ecd83cd1ebe7d709b0e")); |
|
||||||
|
|
||||||
new ASN1Enumerated(Hex.decode("005a47bfc776bcd269da4832626ac332adfca6dd835e8ecd83cd1ebe7d709b0e")); |
|
||||||
|
|
||||||
System.setProperty("com.fr.third.org.bouncycastle.asn1.allow_unsafe_integer", "false"); |
|
||||||
|
|
||||||
try |
|
||||||
{ |
|
||||||
new ASN1Integer(Hex.decode("ffda47bfc776bcd269da4832626ac332adfca6dd835e8ecd83cd1ebe7d709b")); |
|
||||||
|
|
||||||
fail("no exception"); |
|
||||||
} |
|
||||||
catch (IllegalArgumentException e) |
|
||||||
{ |
|
||||||
isEquals("malformed integer", e.getMessage()); |
|
||||||
} |
|
||||||
|
|
||||||
isTrue(!Properties.setThreadOverride("com.fr.third.org.bouncycastle.asn1.allow_unsafe_integer", true)); |
|
||||||
|
|
||||||
new ASN1Integer(Hex.decode("ffda47bfc776bcd269da4832626ac332adfca6dd835e8ecd83cd1ebe7d709b")); |
|
||||||
|
|
||||||
isTrue(Properties.removeThreadOverride("com.fr.third.org.bouncycastle.asn1.allow_unsafe_integer")); |
|
||||||
|
|
||||||
try |
|
||||||
{ |
|
||||||
ASN1Sequence.getInstance(suspectKey); |
|
||||||
|
|
||||||
fail("no exception"); |
|
||||||
} |
|
||||||
catch (IllegalArgumentException e) |
|
||||||
{ |
|
||||||
isEquals("test 1", "failed to construct sequence from byte[]: corrupted stream detected", e.getMessage()); |
|
||||||
} |
|
||||||
|
|
||||||
try |
|
||||||
{ |
|
||||||
new ASN1Integer(Hex.decode("ffda47bfc776bcd269da4832626ac332adfca6dd835e8ecd83cd1ebe7d709b0e")); |
|
||||||
|
|
||||||
fail("no exception"); |
|
||||||
} |
|
||||||
catch (IllegalArgumentException e) |
|
||||||
{ |
|
||||||
isEquals("malformed integer", e.getMessage()); |
|
||||||
} |
|
||||||
|
|
||||||
try |
|
||||||
{ |
|
||||||
new ASN1Enumerated(Hex.decode("ffda47bfc776bcd269da4832626ac332adfca6dd835e8ecd83cd1ebe7d709b0e")); |
|
||||||
|
|
||||||
fail("no exception"); |
|
||||||
} |
|
||||||
catch (IllegalArgumentException e) |
|
||||||
{ |
|
||||||
isEquals("malformed enumerated", e.getMessage()); |
|
||||||
} |
|
||||||
|
|
||||||
try |
|
||||||
{ |
|
||||||
new ASN1Enumerated(Hex.decode("005a47bfc776bcd269da4832626ac332adfca6dd835e8ecd83cd1ebe7d709b0e")); |
|
||||||
|
|
||||||
fail("no exception"); |
|
||||||
} |
|
||||||
catch (IllegalArgumentException e) |
|
||||||
{ |
|
||||||
isEquals("malformed enumerated", e.getMessage()); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Ensure existing single byte behavior. |
|
||||||
*/ |
|
||||||
public void testValidEncodingSingleByte() |
|
||||||
throws Exception |
|
||||||
{ |
|
||||||
System.setProperty("com.fr.third.org.bouncycastle.asn1.allow_unsafe_integer", "false"); |
|
||||||
//
|
|
||||||
// Without property, single byte.
|
|
||||||
//
|
|
||||||
byte[] rawInt = Hex.decode("10"); |
|
||||||
ASN1Integer i = new ASN1Integer(rawInt); |
|
||||||
isEquals(i.getValue().intValue(), 16); |
|
||||||
isEquals(i.intValueExact(), 16); |
|
||||||
|
|
||||||
//
|
|
||||||
// With property set.
|
|
||||||
//
|
|
||||||
System.setProperty("com.fr.third.org.bouncycastle.asn1.allow_unsafe_integer", "true"); |
|
||||||
|
|
||||||
rawInt = Hex.decode("10"); |
|
||||||
i = new ASN1Integer(rawInt); |
|
||||||
isEquals(i.getValue().intValue(), 16); |
|
||||||
isEquals(i.intValueExact(), 16); |
|
||||||
} |
|
||||||
|
|
||||||
public void testValidEncodingMultiByte() |
|
||||||
throws Exception |
|
||||||
{ |
|
||||||
System.setProperty("com.fr.third.org.bouncycastle.asn1.allow_unsafe_integer", "false"); |
|
||||||
//
|
|
||||||
// Without property, single byte.
|
|
||||||
//
|
|
||||||
byte[] rawInt = Hex.decode("10FF"); |
|
||||||
ASN1Integer i = new ASN1Integer(rawInt); |
|
||||||
isEquals(i.getValue().intValue(), 4351); |
|
||||||
isEquals(i.intValueExact(), 4351); |
|
||||||
|
|
||||||
//
|
|
||||||
// With property set.
|
|
||||||
//
|
|
||||||
System.setProperty("com.fr.third.org.bouncycastle.asn1.allow_unsafe_integer", "true"); |
|
||||||
|
|
||||||
rawInt = Hex.decode("10FF"); |
|
||||||
i = new ASN1Integer(rawInt); |
|
||||||
isEquals(i.getValue().intValue(), 4351); |
|
||||||
isEquals(i.intValueExact(), 4351); |
|
||||||
} |
|
||||||
|
|
||||||
public void testInvalidEncoding_00() |
|
||||||
throws Exception |
|
||||||
{ |
|
||||||
System.setProperty("com.fr.third.org.bouncycastle.asn1.allow_unsafe_integer", "false"); |
|
||||||
try |
|
||||||
{ |
|
||||||
byte[] rawInt = Hex.decode("0010FF"); |
|
||||||
new ASN1Integer(rawInt); |
|
||||||
fail("Expecting illegal argument exception."); |
|
||||||
} |
|
||||||
catch (IllegalArgumentException e) |
|
||||||
{ |
|
||||||
isEquals("malformed integer", e.getMessage()); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public void testInvalidEncoding_ff() |
|
||||||
throws Exception |
|
||||||
{ |
|
||||||
System.setProperty("com.fr.third.org.bouncycastle.asn1.allow_unsafe_integer", "false"); |
|
||||||
try |
|
||||||
{ |
|
||||||
byte[] rawInt = Hex.decode("FF81FF"); |
|
||||||
new ASN1Integer(rawInt); |
|
||||||
fail("Expecting illegal argument exception."); |
|
||||||
} |
|
||||||
catch (IllegalArgumentException e) |
|
||||||
{ |
|
||||||
isEquals("malformed integer", e.getMessage()); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public void testInvalidEncoding_00_32bits() |
|
||||||
throws Exception |
|
||||||
{ |
|
||||||
System.setProperty("com.fr.third.org.bouncycastle.asn1.allow_unsafe_integer", "false"); |
|
||||||
//
|
|
||||||
// Check what would pass loose validation fails outside of loose validation.
|
|
||||||
//
|
|
||||||
try |
|
||||||
{ |
|
||||||
byte[] rawInt = Hex.decode("0000000010FF"); |
|
||||||
new ASN1Integer(rawInt); |
|
||||||
fail("Expecting illegal argument exception."); |
|
||||||
} |
|
||||||
catch (IllegalArgumentException e) |
|
||||||
{ |
|
||||||
isEquals("malformed integer", e.getMessage()); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public void testInvalidEncoding_ff_32bits() |
|
||||||
throws Exception |
|
||||||
{ |
|
||||||
System.setProperty("com.fr.third.org.bouncycastle.asn1.allow_unsafe_integer", "false"); |
|
||||||
//
|
|
||||||
// Check what would pass loose validation fails outside of loose validation.
|
|
||||||
//
|
|
||||||
try |
|
||||||
{ |
|
||||||
byte[] rawInt = Hex.decode("FFFFFFFF01FF"); |
|
||||||
new ASN1Integer(rawInt); |
|
||||||
fail("Expecting illegal argument exception."); |
|
||||||
} |
|
||||||
catch (IllegalArgumentException e) |
|
||||||
{ |
|
||||||
isEquals("malformed integer", e.getMessage()); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/* |
|
||||||
Unfortunately it turns out that integers stored without sign bits that are assumed to be |
|
||||||
unsigned.. this means a string of FF may occur and then the user will call getPositiveValue(). |
|
||||||
Sigh.. |
|
||||||
public void testLooseInvalidValidEncoding_zero_32B() |
|
||||||
throws Exception |
|
||||||
{ |
|
||||||
System.setProperty("com.fr.third.org.bouncycastle.asn1.allow_unsafe_integer", "false"); |
|
||||||
//
|
|
||||||
// Should still fail as loose validation only permits 3 leading 0x00 bytes.
|
|
||||||
//
|
|
||||||
try |
|
||||||
{ |
|
||||||
System.getProperties().put("com.fr.third.org.bouncycastle.asn1.allow_unsafe_integer", "true"); |
|
||||||
byte[] rawInt = Hex.decode("0000000010FF"); |
|
||||||
ASN1Integer i = new ASN1Integer(rawInt); |
|
||||||
fail("Expecting illegal argument exception."); |
|
||||||
} |
|
||||||
catch (IllegalArgumentException e) |
|
||||||
{ |
|
||||||
isEquals("malformed integer", e.getMessage()); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public void testLooseInvalidValidEncoding_FF_32B() |
|
||||||
throws Exception |
|
||||||
{ |
|
||||||
System.setProperty("com.fr.third.org.bouncycastle.asn1.allow_unsafe_integer", "false"); |
|
||||||
//
|
|
||||||
// Should still fail as loose validation only permits 3 leading 0xFF bytes.
|
|
||||||
//
|
|
||||||
try |
|
||||||
{ |
|
||||||
System.getProperties().put("com.fr.third.org.bouncycastle.asn1.allow_unsafe_integer", "true"); |
|
||||||
byte[] rawInt = Hex.decode("FFFFFFFF10FF"); |
|
||||||
ASN1Integer i = new ASN1Integer(rawInt); |
|
||||||
fail("Expecting illegal argument exception."); |
|
||||||
} |
|
||||||
catch (IllegalArgumentException e) |
|
||||||
{ |
|
||||||
isEquals("malformed integer", e.getMessage()); |
|
||||||
} |
|
||||||
} |
|
||||||
*/ |
|
||||||
|
|
||||||
public void testLooseValidEncoding_zero_32BAligned() |
|
||||||
throws Exception |
|
||||||
{ |
|
||||||
System.setProperty("com.fr.third.org.bouncycastle.asn1.allow_unsafe_integer", "false"); |
|
||||||
//
|
|
||||||
// Should pass as loose validation permits 3 leading 0x00 bytes.
|
|
||||||
//
|
|
||||||
|
|
||||||
System.getProperties().put("com.fr.third.org.bouncycastle.asn1.allow_unsafe_integer", "true"); |
|
||||||
byte[] rawInt = Hex.decode("00000010FF000000"); |
|
||||||
ASN1Integer i = new ASN1Integer(rawInt); |
|
||||||
isEquals(72997666816L, BigIntegers.longValueExact(i.getValue())); |
|
||||||
} |
|
||||||
|
|
||||||
public void testLooseValidEncoding_FF_32BAligned() |
|
||||||
throws Exception |
|
||||||
{ |
|
||||||
System.setProperty("com.fr.third.org.bouncycastle.asn1.allow_unsafe_integer", "false"); |
|
||||||
//
|
|
||||||
// Should pass as loose validation permits 3
|
|
||||||
|
|
||||||
System.getProperties().put("com.fr.third.org.bouncycastle.asn1.allow_unsafe_integer", "true"); |
|
||||||
byte[] rawInt = Hex.decode("FFFFFF10FF000000"); |
|
||||||
ASN1Integer i = new ASN1Integer(rawInt); |
|
||||||
isEquals(-1026513960960L, BigIntegers.longValueExact(i.getValue())); |
|
||||||
} |
|
||||||
|
|
||||||
public void testLooseValidEncoding_FF_32BAligned_1not0() |
|
||||||
throws Exception |
|
||||||
{ |
|
||||||
System.setProperty("com.fr.third.org.bouncycastle.asn1.allow_unsafe_integer", "false"); |
|
||||||
//
|
|
||||||
// Should pass as loose validation permits 3 leading 0xFF bytes.
|
|
||||||
//
|
|
||||||
|
|
||||||
System.getProperties().put("com.fr.third.org.bouncycastle.asn1.allow_unsafe_integer", "true"); |
|
||||||
byte[] rawInt = Hex.decode("FFFEFF10FF000000"); |
|
||||||
ASN1Integer i = new ASN1Integer(rawInt); |
|
||||||
isEquals(-282501490671616L, BigIntegers.longValueExact(i.getValue())); |
|
||||||
} |
|
||||||
|
|
||||||
public void testLooseValidEncoding_FF_32BAligned_2not0() |
|
||||||
throws Exception |
|
||||||
{ |
|
||||||
System.setProperty("com.fr.third.org.bouncycastle.asn1.allow_unsafe_integer", "false"); |
|
||||||
//
|
|
||||||
// Should pass as loose validation permits 3 leading 0xFF bytes.
|
|
||||||
//
|
|
||||||
|
|
||||||
System.getProperties().put("com.fr.third.org.bouncycastle.asn1.allow_unsafe_integer", "true"); |
|
||||||
byte[] rawInt = Hex.decode("FFFFFE10FF000000"); |
|
||||||
ASN1Integer i = new ASN1Integer(rawInt); |
|
||||||
isEquals(-2126025588736L, BigIntegers.longValueExact(i.getValue())); |
|
||||||
} |
|
||||||
|
|
||||||
public void testOversizedEncoding() |
|
||||||
throws Exception |
|
||||||
{ |
|
||||||
System.setProperty("com.fr.third.org.bouncycastle.asn1.allow_unsafe_integer", "false"); |
|
||||||
//
|
|
||||||
// Should pass as loose validation permits 3 leading 0xFF bytes.
|
|
||||||
//
|
|
||||||
|
|
||||||
System.getProperties().put("com.fr.third.org.bouncycastle.asn1.allow_unsafe_integer", "true"); |
|
||||||
byte[] rawInt = Hex.decode("FFFFFFFE10FF000000000000"); |
|
||||||
ASN1Integer i = new ASN1Integer(rawInt); |
|
||||||
isEquals(new BigInteger(Hex.decode("FFFFFFFE10FF000000000000")), i.getValue()); |
|
||||||
|
|
||||||
rawInt = Hex.decode("FFFFFFFFFE10FF000000000000"); |
|
||||||
try |
|
||||||
{ |
|
||||||
new ASN1Integer(rawInt); |
|
||||||
} |
|
||||||
catch (IllegalArgumentException e) |
|
||||||
{ |
|
||||||
isEquals("malformed integer", e.getMessage()); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public static void main( |
|
||||||
String[] args) |
|
||||||
{ |
|
||||||
runTest(new ASN1IntegerTest()); |
|
||||||
} |
|
||||||
} |
|
@ -1,89 +0,0 @@ |
|||||||
package com.fr.third.org.bouncycastle.asn1.test; |
|
||||||
|
|
||||||
import com.fr.third.org.bouncycastle.asn1.ASN1Encodable; |
|
||||||
import com.fr.third.org.bouncycastle.util.test.SimpleTest; |
|
||||||
|
|
||||||
import java.math.BigInteger; |
|
||||||
|
|
||||||
public abstract class ASN1UnitTest |
|
||||||
extends SimpleTest |
|
||||||
{ |
|
||||||
protected void checkMandatoryField(String name, ASN1Encodable expected, ASN1Encodable present) |
|
||||||
{ |
|
||||||
if (!expected.equals(present)) |
|
||||||
{ |
|
||||||
fail(name + " field doesn't match."); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
protected void checkMandatoryField(String name, String expected, String present) |
|
||||||
{ |
|
||||||
if (!expected.equals(present)) |
|
||||||
{ |
|
||||||
fail(name + " field doesn't match."); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
protected void checkMandatoryField(String name, byte[] expected, byte[] present) |
|
||||||
{ |
|
||||||
if (!areEqual(expected, present)) |
|
||||||
{ |
|
||||||
fail(name + " field doesn't match."); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
protected void checkMandatoryField(String name, int expected, int present) |
|
||||||
{ |
|
||||||
if (expected != present) |
|
||||||
{ |
|
||||||
fail(name + " field doesn't match."); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
protected void checkOptionalField(String name, ASN1Encodable expected, ASN1Encodable present) |
|
||||||
{ |
|
||||||
if (expected != null) |
|
||||||
{ |
|
||||||
if (!expected.equals(present)) |
|
||||||
{ |
|
||||||
fail(name + " field doesn't match."); |
|
||||||
} |
|
||||||
} |
|
||||||
else if (present != null) |
|
||||||
{ |
|
||||||
fail(name + " field found when none expected."); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
protected void checkOptionalField(String name, String expected, String present) |
|
||||||
{ |
|
||||||
if (expected != null) |
|
||||||
{ |
|
||||||
if (!expected.equals(present)) |
|
||||||
{ |
|
||||||
fail(name + " field doesn't match."); |
|
||||||
} |
|
||||||
} |
|
||||||
else if (present != null) |
|
||||||
{ |
|
||||||
fail(name + " field found when none expected."); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
protected void checkOptionalField(String name, BigInteger expected, BigInteger present) |
|
||||||
{ |
|
||||||
if (expected != null) |
|
||||||
{ |
|
||||||
if (!expected.equals(present)) |
|
||||||
{ |
|
||||||
fail(name + " field doesn't match."); |
|
||||||
} |
|
||||||
} |
|
||||||
else if (present != null) |
|
||||||
{ |
|
||||||
fail(name + " field found when none expected."); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
} |
|
@ -1,69 +0,0 @@ |
|||||||
package com.fr.third.org.bouncycastle.asn1.test; |
|
||||||
|
|
||||||
import java.io.IOException; |
|
||||||
|
|
||||||
import com.fr.third.org.bouncycastle.asn1.ASN1InputStream; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.ASN1String; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.isismtt.x509.AdditionalInformationSyntax; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.x500.DirectoryString; |
|
||||||
|
|
||||||
public class AdditionalInformationSyntaxUnitTest |
|
||||||
extends ASN1UnitTest |
|
||||||
{ |
|
||||||
public String getName() |
|
||||||
{ |
|
||||||
return "AdditionalInformationSyntax"; |
|
||||||
} |
|
||||||
|
|
||||||
public void performTest() |
|
||||||
throws Exception |
|
||||||
{ |
|
||||||
AdditionalInformationSyntax syntax = new AdditionalInformationSyntax("hello world"); |
|
||||||
|
|
||||||
checkConstruction(syntax, new DirectoryString("hello world")); |
|
||||||
|
|
||||||
try |
|
||||||
{ |
|
||||||
AdditionalInformationSyntax.getInstance(new Object()); |
|
||||||
|
|
||||||
fail("getInstance() failed to detect bad object."); |
|
||||||
} |
|
||||||
catch (IllegalArgumentException e) |
|
||||||
{ |
|
||||||
// expected
|
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private void checkConstruction( |
|
||||||
AdditionalInformationSyntax syntax, |
|
||||||
DirectoryString information) |
|
||||||
throws IOException |
|
||||||
{ |
|
||||||
checkValues(syntax, information); |
|
||||||
|
|
||||||
syntax = AdditionalInformationSyntax.getInstance(syntax); |
|
||||||
|
|
||||||
checkValues(syntax, information); |
|
||||||
|
|
||||||
ASN1InputStream aIn = new ASN1InputStream(syntax.toASN1Primitive().getEncoded()); |
|
||||||
|
|
||||||
ASN1String info = (ASN1String)aIn.readObject(); |
|
||||||
|
|
||||||
syntax = AdditionalInformationSyntax.getInstance(info); |
|
||||||
|
|
||||||
checkValues(syntax, information); |
|
||||||
} |
|
||||||
|
|
||||||
private void checkValues( |
|
||||||
AdditionalInformationSyntax syntax, |
|
||||||
DirectoryString information) |
|
||||||
{ |
|
||||||
checkMandatoryField("information", information, syntax.getInformation()); |
|
||||||
} |
|
||||||
|
|
||||||
public static void main( |
|
||||||
String[] args) |
|
||||||
{ |
|
||||||
runTest(new AdditionalInformationSyntaxUnitTest()); |
|
||||||
} |
|
||||||
} |
|
@ -1,97 +0,0 @@ |
|||||||
package com.fr.third.org.bouncycastle.asn1.test; |
|
||||||
|
|
||||||
import java.io.IOException; |
|
||||||
|
|
||||||
import com.fr.third.org.bouncycastle.asn1.ASN1InputStream; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.ASN1ObjectIdentifier; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.ASN1Sequence; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.DERSequence; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.isismtt.x509.AdmissionSyntax; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.isismtt.x509.Admissions; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.isismtt.x509.NamingAuthority; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.isismtt.x509.ProfessionInfo; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.x500.DirectoryString; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.x500.X500Name; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.x509.GeneralName; |
|
||||||
|
|
||||||
public class AdmissionSyntaxUnitTest |
|
||||||
extends ASN1UnitTest |
|
||||||
{ |
|
||||||
public String getName() |
|
||||||
{ |
|
||||||
return "AdmissionSyntax"; |
|
||||||
} |
|
||||||
|
|
||||||
public void performTest() |
|
||||||
throws Exception |
|
||||||
{ |
|
||||||
GeneralName name = new GeneralName(new X500Name("CN=hello world")); |
|
||||||
ASN1Sequence admissions = new DERSequence( |
|
||||||
new Admissions(name, |
|
||||||
new NamingAuthority(new ASN1ObjectIdentifier("1.2.3"), "url", new DirectoryString("fred")), |
|
||||||
new ProfessionInfo[0])); |
|
||||||
AdmissionSyntax syntax = new AdmissionSyntax(name, admissions); |
|
||||||
|
|
||||||
checkConstruction(syntax, name, admissions); |
|
||||||
|
|
||||||
syntax = AdmissionSyntax.getInstance(null); |
|
||||||
|
|
||||||
if (syntax != null) |
|
||||||
{ |
|
||||||
fail("null getInstance() failed."); |
|
||||||
} |
|
||||||
|
|
||||||
try |
|
||||||
{ |
|
||||||
AdmissionSyntax.getInstance(new Object()); |
|
||||||
|
|
||||||
fail("getInstance() failed to detect bad object."); |
|
||||||
} |
|
||||||
catch (IllegalArgumentException e) |
|
||||||
{ |
|
||||||
// expected
|
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private void checkConstruction( |
|
||||||
AdmissionSyntax syntax, |
|
||||||
GeneralName authority, |
|
||||||
ASN1Sequence admissions) |
|
||||||
throws IOException |
|
||||||
{ |
|
||||||
checkValues(syntax, authority, admissions); |
|
||||||
|
|
||||||
syntax = AdmissionSyntax.getInstance(syntax); |
|
||||||
|
|
||||||
checkValues(syntax, authority, admissions); |
|
||||||
|
|
||||||
ASN1InputStream aIn = new ASN1InputStream(syntax.toASN1Primitive().getEncoded()); |
|
||||||
|
|
||||||
ASN1Sequence info = (ASN1Sequence)aIn.readObject(); |
|
||||||
|
|
||||||
syntax = AdmissionSyntax.getInstance(info); |
|
||||||
|
|
||||||
checkValues(syntax, authority, admissions); |
|
||||||
} |
|
||||||
|
|
||||||
private void checkValues( |
|
||||||
AdmissionSyntax syntax, |
|
||||||
GeneralName authority, |
|
||||||
ASN1Sequence admissions) |
|
||||||
{ |
|
||||||
checkMandatoryField("admissionAuthority", authority, syntax.getAdmissionAuthority()); |
|
||||||
|
|
||||||
Admissions[] adm = syntax.getContentsOfAdmissions(); |
|
||||||
|
|
||||||
if (adm.length != 1 || !adm[0].equals(admissions.getObjectAt(0))) |
|
||||||
{ |
|
||||||
fail("admissions check failed"); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public static void main( |
|
||||||
String[] args) |
|
||||||
{ |
|
||||||
runTest(new AdmissionSyntaxUnitTest()); |
|
||||||
} |
|
||||||
} |
|
@ -1,86 +0,0 @@ |
|||||||
package com.fr.third.org.bouncycastle.asn1.test; |
|
||||||
|
|
||||||
import java.io.IOException; |
|
||||||
|
|
||||||
import com.fr.third.org.bouncycastle.asn1.ASN1InputStream; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.ASN1ObjectIdentifier; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.ASN1Sequence; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.isismtt.x509.Admissions; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.isismtt.x509.NamingAuthority; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.isismtt.x509.ProfessionInfo; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.x500.DirectoryString; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.x500.X500Name; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.x509.GeneralName; |
|
||||||
|
|
||||||
public class AdmissionsUnitTest |
|
||||||
extends ASN1UnitTest |
|
||||||
{ |
|
||||||
public String getName() |
|
||||||
{ |
|
||||||
return "Admissions"; |
|
||||||
} |
|
||||||
|
|
||||||
public void performTest() |
|
||||||
throws Exception |
|
||||||
{ |
|
||||||
GeneralName name = new GeneralName(new X500Name("CN=hello world")); |
|
||||||
NamingAuthority auth = new NamingAuthority(new ASN1ObjectIdentifier("1.2.3"), "url", new DirectoryString("fred")); |
|
||||||
Admissions admissions = new Admissions(name, auth, new ProfessionInfo[0]); |
|
||||||
|
|
||||||
checkConstruction(admissions, name, auth); |
|
||||||
|
|
||||||
admissions = Admissions.getInstance(null); |
|
||||||
|
|
||||||
if (admissions != null) |
|
||||||
{ |
|
||||||
fail("null getInstance() failed."); |
|
||||||
} |
|
||||||
|
|
||||||
try |
|
||||||
{ |
|
||||||
Admissions.getInstance(new Object()); |
|
||||||
|
|
||||||
fail("getInstance() failed to detect bad object."); |
|
||||||
} |
|
||||||
catch (IllegalArgumentException e) |
|
||||||
{ |
|
||||||
// expected
|
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private void checkConstruction( |
|
||||||
Admissions admissions, |
|
||||||
GeneralName name, |
|
||||||
NamingAuthority auth) |
|
||||||
throws IOException |
|
||||||
{ |
|
||||||
checkValues(admissions, name, auth); |
|
||||||
|
|
||||||
admissions = Admissions.getInstance(admissions); |
|
||||||
|
|
||||||
checkValues(admissions, name, auth); |
|
||||||
|
|
||||||
ASN1InputStream aIn = new ASN1InputStream(admissions.toASN1Primitive().getEncoded()); |
|
||||||
|
|
||||||
ASN1Sequence info = (ASN1Sequence)aIn.readObject(); |
|
||||||
|
|
||||||
admissions = Admissions.getInstance(info); |
|
||||||
|
|
||||||
checkValues(admissions, name, auth); |
|
||||||
} |
|
||||||
|
|
||||||
private void checkValues( |
|
||||||
Admissions admissions, |
|
||||||
GeneralName name, |
|
||||||
NamingAuthority auth) |
|
||||||
{ |
|
||||||
checkMandatoryField("admissionAuthority", name, admissions.getAdmissionAuthority()); |
|
||||||
checkMandatoryField("namingAuthority", auth, admissions.getNamingAuthority()); |
|
||||||
} |
|
||||||
|
|
||||||
public static void main( |
|
||||||
String[] args) |
|
||||||
{ |
|
||||||
runTest(new AdmissionsUnitTest()); |
|
||||||
} |
|
||||||
} |
|
@ -1,144 +0,0 @@ |
|||||||
package com.fr.third.org.bouncycastle.asn1.test; |
|
||||||
|
|
||||||
import java.util.Hashtable; |
|
||||||
|
|
||||||
import com.fr.third.org.bouncycastle.asn1.ASN1EncodableVector; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.ASN1ObjectIdentifier; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.DERSet; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.cms.Attribute; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.cms.AttributeTable; |
|
||||||
import com.fr.third.org.bouncycastle.util.test.SimpleTest; |
|
||||||
|
|
||||||
public class AttributeTableUnitTest |
|
||||||
extends SimpleTest |
|
||||||
{ |
|
||||||
private static final ASN1ObjectIdentifier type1 = new ASN1ObjectIdentifier("1.1.1"); |
|
||||||
private static final ASN1ObjectIdentifier type2 = new ASN1ObjectIdentifier("1.1.2"); |
|
||||||
private static final ASN1ObjectIdentifier type3 = new ASN1ObjectIdentifier("1.1.3"); |
|
||||||
|
|
||||||
public String getName() |
|
||||||
{ |
|
||||||
return "AttributeTable"; |
|
||||||
} |
|
||||||
|
|
||||||
public void performTest() |
|
||||||
throws Exception |
|
||||||
{ |
|
||||||
ASN1EncodableVector v = new ASN1EncodableVector(); |
|
||||||
|
|
||||||
v.add(new Attribute(type1, new DERSet(type1))); |
|
||||||
v.add(new Attribute(type2, new DERSet(type2))); |
|
||||||
|
|
||||||
AttributeTable table = new AttributeTable(v); |
|
||||||
|
|
||||||
Attribute a = table.get(type1); |
|
||||||
if (a == null) |
|
||||||
{ |
|
||||||
fail("type1 attribute not found."); |
|
||||||
} |
|
||||||
if (!a.getAttrValues().equals(new DERSet(type1))) |
|
||||||
{ |
|
||||||
fail("wrong value retrieved for type1!"); |
|
||||||
} |
|
||||||
|
|
||||||
a = table.get(type2); |
|
||||||
if (a == null) |
|
||||||
{ |
|
||||||
fail("type2 attribute not found."); |
|
||||||
} |
|
||||||
if (!a.getAttrValues().equals(new DERSet(type2))) |
|
||||||
{ |
|
||||||
fail("wrong value retrieved for type2!"); |
|
||||||
} |
|
||||||
|
|
||||||
a = table.get(type3); |
|
||||||
if (a != null) |
|
||||||
{ |
|
||||||
fail("type3 attribute found when none expected."); |
|
||||||
} |
|
||||||
|
|
||||||
ASN1EncodableVector vec = table.getAll(type1); |
|
||||||
if (vec.size() != 1) |
|
||||||
{ |
|
||||||
fail("wrong vector size for type1."); |
|
||||||
} |
|
||||||
|
|
||||||
vec = table.getAll(type3); |
|
||||||
if (vec.size() != 0) |
|
||||||
{ |
|
||||||
fail("wrong vector size for type3."); |
|
||||||
} |
|
||||||
|
|
||||||
vec = table.toASN1EncodableVector(); |
|
||||||
if (vec.size() != 2) |
|
||||||
{ |
|
||||||
fail("wrong vector size for single."); |
|
||||||
} |
|
||||||
|
|
||||||
Hashtable t = table.toHashtable(); |
|
||||||
|
|
||||||
if (t.size() != 2) |
|
||||||
{ |
|
||||||
fail("hashtable wrong size."); |
|
||||||
} |
|
||||||
|
|
||||||
// multiple
|
|
||||||
|
|
||||||
v = new ASN1EncodableVector(); |
|
||||||
|
|
||||||
v.add(new Attribute(type1, new DERSet(type1))); |
|
||||||
v.add(new Attribute(type1, new DERSet(type2))); |
|
||||||
v.add(new Attribute(type1, new DERSet(type3))); |
|
||||||
v.add(new Attribute(type2, new DERSet(type2))); |
|
||||||
|
|
||||||
table = new AttributeTable(v); |
|
||||||
|
|
||||||
a = table.get(type1); |
|
||||||
if (!a.getAttrValues().equals(new DERSet(type1))) |
|
||||||
{ |
|
||||||
fail("wrong value retrieved for type1 multi get!"); |
|
||||||
} |
|
||||||
|
|
||||||
vec = table.getAll(type1); |
|
||||||
if (vec.size() != 3) |
|
||||||
{ |
|
||||||
fail("wrong vector size for multiple type1."); |
|
||||||
} |
|
||||||
|
|
||||||
a = (Attribute)vec.get(0); |
|
||||||
if (!a.getAttrValues().equals(new DERSet(type1))) |
|
||||||
{ |
|
||||||
fail("wrong value retrieved for type1(0)!"); |
|
||||||
} |
|
||||||
|
|
||||||
a = (Attribute)vec.get(1); |
|
||||||
if (!a.getAttrValues().equals(new DERSet(type2))) |
|
||||||
{ |
|
||||||
fail("wrong value retrieved for type1(1)!"); |
|
||||||
} |
|
||||||
|
|
||||||
a = (Attribute)vec.get(2); |
|
||||||
if (!a.getAttrValues().equals(new DERSet(type3))) |
|
||||||
{ |
|
||||||
fail("wrong value retrieved for type1(2)!"); |
|
||||||
} |
|
||||||
|
|
||||||
vec = table.getAll(type2); |
|
||||||
if (vec.size() != 1) |
|
||||||
{ |
|
||||||
fail("wrong vector size for multiple type2."); |
|
||||||
} |
|
||||||
|
|
||||||
vec = table.toASN1EncodableVector(); |
|
||||||
if (vec.size() != 4) |
|
||||||
{ |
|
||||||
fail("wrong vector size for multiple."); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public static void main( |
|
||||||
String[] args) |
|
||||||
{ |
|
||||||
runTest(new AttributeTableUnitTest()); |
|
||||||
} |
|
||||||
} |
|
@ -1,133 +0,0 @@ |
|||||||
package com.fr.third.org.bouncycastle.asn1.test; |
|
||||||
|
|
||||||
import java.security.SecureRandom; |
|
||||||
|
|
||||||
import com.fr.third.org.bouncycastle.asn1.ASN1InputStream; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.ASN1OctetString; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.ASN1Sequence; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.DERIA5String; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.DERNull; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.DEROctetString; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.x509.AlgorithmIdentifier; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.x509.qualified.BiometricData; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.x509.qualified.TypeOfBiometricData; |
|
||||||
import com.fr.third.org.bouncycastle.util.test.SimpleTest; |
|
||||||
|
|
||||||
public class BiometricDataUnitTest |
|
||||||
extends SimpleTest |
|
||||||
{ |
|
||||||
public String getName() |
|
||||||
{ |
|
||||||
return "BiometricData"; |
|
||||||
} |
|
||||||
|
|
||||||
private byte[] generateHash() |
|
||||||
{ |
|
||||||
SecureRandom rand = new SecureRandom(); |
|
||||||
byte[] bytes = new byte[20]; |
|
||||||
|
|
||||||
rand.nextBytes(bytes); |
|
||||||
|
|
||||||
return bytes; |
|
||||||
} |
|
||||||
|
|
||||||
public void performTest() |
|
||||||
throws Exception |
|
||||||
{ |
|
||||||
TypeOfBiometricData dataType = new TypeOfBiometricData(TypeOfBiometricData.HANDWRITTEN_SIGNATURE); |
|
||||||
AlgorithmIdentifier hashAlgorithm = new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1, DERNull.INSTANCE); |
|
||||||
ASN1OctetString dataHash = new DEROctetString(generateHash()); |
|
||||||
BiometricData bd = new BiometricData(dataType, hashAlgorithm, dataHash); |
|
||||||
|
|
||||||
checkConstruction(bd, dataType, hashAlgorithm, dataHash, null); |
|
||||||
|
|
||||||
DERIA5String dataUri = new DERIA5String("http://test"); |
|
||||||
|
|
||||||
bd = new BiometricData(dataType, hashAlgorithm, dataHash, dataUri); |
|
||||||
|
|
||||||
checkConstruction(bd, dataType, hashAlgorithm, dataHash, dataUri); |
|
||||||
|
|
||||||
bd = BiometricData.getInstance(null); |
|
||||||
|
|
||||||
if (bd != null) |
|
||||||
{ |
|
||||||
fail("null getInstance() failed."); |
|
||||||
} |
|
||||||
|
|
||||||
try |
|
||||||
{ |
|
||||||
BiometricData.getInstance(new Object()); |
|
||||||
|
|
||||||
fail("getInstance() failed to detect bad object."); |
|
||||||
} |
|
||||||
catch (IllegalArgumentException e) |
|
||||||
{ |
|
||||||
// expected
|
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private void checkConstruction( |
|
||||||
BiometricData bd, |
|
||||||
TypeOfBiometricData dataType, |
|
||||||
AlgorithmIdentifier hashAlgorithm, |
|
||||||
ASN1OctetString dataHash, |
|
||||||
DERIA5String dataUri) |
|
||||||
throws Exception |
|
||||||
{ |
|
||||||
checkValues(bd, dataType, hashAlgorithm, dataHash, dataUri); |
|
||||||
|
|
||||||
bd = BiometricData.getInstance(bd); |
|
||||||
|
|
||||||
checkValues(bd, dataType, hashAlgorithm, dataHash, dataUri); |
|
||||||
|
|
||||||
ASN1InputStream aIn = new ASN1InputStream(bd.toASN1Primitive().getEncoded()); |
|
||||||
|
|
||||||
ASN1Sequence seq = (ASN1Sequence)aIn.readObject(); |
|
||||||
|
|
||||||
bd = BiometricData.getInstance(seq); |
|
||||||
|
|
||||||
checkValues(bd, dataType, hashAlgorithm, dataHash, dataUri); |
|
||||||
} |
|
||||||
|
|
||||||
private void checkValues( |
|
||||||
BiometricData bd, |
|
||||||
TypeOfBiometricData dataType, |
|
||||||
AlgorithmIdentifier algID, |
|
||||||
ASN1OctetString dataHash, |
|
||||||
DERIA5String sourceDataURI) |
|
||||||
{ |
|
||||||
if (!bd.getTypeOfBiometricData().equals(dataType)) |
|
||||||
{ |
|
||||||
fail("types don't match."); |
|
||||||
} |
|
||||||
|
|
||||||
if (!bd.getHashAlgorithm().equals(algID)) |
|
||||||
{ |
|
||||||
fail("hash algorithms don't match."); |
|
||||||
} |
|
||||||
|
|
||||||
if (!bd.getBiometricDataHash().equals(dataHash)) |
|
||||||
{ |
|
||||||
fail("hash algorithms don't match."); |
|
||||||
} |
|
||||||
|
|
||||||
if (sourceDataURI != null) |
|
||||||
{ |
|
||||||
if (!bd.getSourceDataUri().equals(sourceDataURI)) |
|
||||||
{ |
|
||||||
fail("data uris don't match."); |
|
||||||
} |
|
||||||
} |
|
||||||
else if (bd.getSourceDataUri() != null) |
|
||||||
{ |
|
||||||
fail("data uri found when none expected."); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public static void main( |
|
||||||
String[] args) |
|
||||||
{ |
|
||||||
runTest(new BiometricDataUnitTest()); |
|
||||||
} |
|
||||||
} |
|
@ -1,22 +0,0 @@ |
|||||||
package com.fr.third.org.bouncycastle.asn1.test; |
|
||||||
|
|
||||||
public class BitStringConstantTester |
|
||||||
{ |
|
||||||
private static final int[] bits = |
|
||||||
{ |
|
||||||
1 << 7, 1 << 6, 1 << 5, 1 << 4, 1 << 3, 1 << 2, 1 << 1, 1 << 0, |
|
||||||
1 << 15, 1 << 14, 1 << 13, 1 << 12, 1 << 11, 1 << 10, 1 << 9, 1 << 8, |
|
||||||
1 << 23, 1 << 22, 1 << 21, 1 << 20, 1 << 19, 1 << 18, 1 << 17, 1 << 16, |
|
||||||
1 << 31, 1 << 30, 1 << 29, 1 << 28, 1 << 27, 1 << 26, 1 << 25, 1 << 24 |
|
||||||
}; |
|
||||||
|
|
||||||
public static void testFlagValueCorrect( |
|
||||||
int bitNo, |
|
||||||
int value) |
|
||||||
{ |
|
||||||
if (bits[bitNo] != value) |
|
||||||
{ |
|
||||||
throw new IllegalArgumentException("bit value " + bitNo + " wrong"); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,185 +0,0 @@ |
|||||||
package com.fr.third.org.bouncycastle.asn1.test; |
|
||||||
|
|
||||||
import java.io.IOException; |
|
||||||
|
|
||||||
import com.fr.third.org.bouncycastle.asn1.ASN1BitString; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.ASN1Encoding; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.ASN1Primitive; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.DERBitString; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.DLBitString; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.x509.KeyUsage; |
|
||||||
import com.fr.third.org.bouncycastle.util.Arrays; |
|
||||||
import com.fr.third.org.bouncycastle.util.encoders.Hex; |
|
||||||
import com.fr.third.org.bouncycastle.util.test.SimpleTest; |
|
||||||
import com.fr.third.org.bouncycastle.util.test.TestResult; |
|
||||||
|
|
||||||
public class BitStringTest |
|
||||||
extends SimpleTest |
|
||||||
{ |
|
||||||
private void testZeroLengthStrings() |
|
||||||
throws Exception |
|
||||||
{ |
|
||||||
// basic construction
|
|
||||||
DERBitString s1 = new DERBitString(new byte[0], 0); |
|
||||||
|
|
||||||
// check getBytes()
|
|
||||||
s1.getBytes(); |
|
||||||
|
|
||||||
// check encoding/decoding
|
|
||||||
DERBitString derBit = (DERBitString)ASN1Primitive.fromByteArray(s1.getEncoded()); |
|
||||||
|
|
||||||
if (!Arrays.areEqual(s1.getEncoded(), Hex.decode("030100"))) |
|
||||||
{ |
|
||||||
fail("zero encoding wrong"); |
|
||||||
} |
|
||||||
|
|
||||||
try |
|
||||||
{ |
|
||||||
new DERBitString(null, 1); |
|
||||||
fail("exception not thrown"); |
|
||||||
} |
|
||||||
catch (NullPointerException e) |
|
||||||
{ |
|
||||||
if (!"'data' cannot be null".equals(e.getMessage())) |
|
||||||
{ |
|
||||||
fail("Unexpected exception: " + e.getMessage()); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
try |
|
||||||
{ |
|
||||||
new DERBitString(new byte[0], 1); |
|
||||||
fail("exception not thrown"); |
|
||||||
} |
|
||||||
catch (IllegalArgumentException e) |
|
||||||
{ |
|
||||||
if (!"zero length data with non-zero pad bits".equals(e.getMessage())) |
|
||||||
{ |
|
||||||
fail("Unexpected exception"); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
try |
|
||||||
{ |
|
||||||
new DERBitString(new byte[1], 8); |
|
||||||
fail("exception not thrown"); |
|
||||||
} |
|
||||||
catch (IllegalArgumentException e) |
|
||||||
{ |
|
||||||
if (!"pad bits cannot be greater than 7 or less than 0".equals(e.getMessage())) |
|
||||||
{ |
|
||||||
fail("Unexpected exception"); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
DERBitString s2 = new DERBitString(0); |
|
||||||
if (!Arrays.areEqual(s1.getEncoded(), s2.getEncoded())) |
|
||||||
{ |
|
||||||
fail("zero encoding wrong"); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private void testRandomPadBits() |
|
||||||
throws Exception |
|
||||||
{ |
|
||||||
byte[] test = Hex.decode("030206c0"); |
|
||||||
|
|
||||||
byte[] test1 = Hex.decode("030206f0"); |
|
||||||
byte[] test2 = Hex.decode("030206c1"); |
|
||||||
byte[] test3 = Hex.decode("030206c7"); |
|
||||||
byte[] test4 = Hex.decode("030206d1"); |
|
||||||
|
|
||||||
encodingCheck(test, test1); |
|
||||||
encodingCheck(test, test2); |
|
||||||
encodingCheck(test, test3); |
|
||||||
encodingCheck(test, test4); |
|
||||||
} |
|
||||||
|
|
||||||
private void encodingCheck(byte[] derData, byte[] dlData) |
|
||||||
throws IOException |
|
||||||
{ |
|
||||||
if (Arrays.areEqual(derData, ASN1Primitive.fromByteArray(dlData).getEncoded())) |
|
||||||
{ |
|
||||||
fail("failed DL check"); |
|
||||||
} |
|
||||||
ASN1BitString dl = DLBitString.getInstance(dlData); |
|
||||||
|
|
||||||
isTrue("DL test failed", dl instanceof DLBitString); |
|
||||||
if (!Arrays.areEqual(derData, ASN1Primitive.fromByteArray(dlData).getEncoded(ASN1Encoding.DER))) |
|
||||||
{ |
|
||||||
fail("failed DER check"); |
|
||||||
} |
|
||||||
try |
|
||||||
{ |
|
||||||
DERBitString.getInstance(dlData); |
|
||||||
fail("no exception"); |
|
||||||
} |
|
||||||
catch (IllegalArgumentException e) |
|
||||||
{ |
|
||||||
// ignore
|
|
||||||
} |
|
||||||
ASN1BitString der = DERBitString.getInstance(derData); |
|
||||||
isTrue("DER test failed", der instanceof DERBitString); |
|
||||||
} |
|
||||||
|
|
||||||
public void performTest() |
|
||||||
throws Exception |
|
||||||
{ |
|
||||||
KeyUsage k = new KeyUsage(KeyUsage.digitalSignature); |
|
||||||
if ((k.getBytes()[0] != (byte)KeyUsage.digitalSignature) || (k.getPadBits() != 7)) |
|
||||||
{ |
|
||||||
fail("failed digitalSignature"); |
|
||||||
} |
|
||||||
|
|
||||||
k = new KeyUsage(KeyUsage.nonRepudiation); |
|
||||||
if ((k.getBytes()[0] != (byte)KeyUsage.nonRepudiation) || (k.getPadBits() != 6)) |
|
||||||
{ |
|
||||||
fail("failed nonRepudiation"); |
|
||||||
} |
|
||||||
|
|
||||||
k = new KeyUsage(KeyUsage.keyEncipherment); |
|
||||||
if ((k.getBytes()[0] != (byte)KeyUsage.keyEncipherment) || (k.getPadBits() != 5)) |
|
||||||
{ |
|
||||||
fail("failed keyEncipherment"); |
|
||||||
} |
|
||||||
|
|
||||||
k = new KeyUsage(KeyUsage.cRLSign); |
|
||||||
if ((k.getBytes()[0] != (byte)KeyUsage.cRLSign) || (k.getPadBits() != 1)) |
|
||||||
{ |
|
||||||
fail("failed cRLSign"); |
|
||||||
} |
|
||||||
|
|
||||||
k = new KeyUsage(KeyUsage.decipherOnly); |
|
||||||
if ((k.getBytes()[1] != (byte)(KeyUsage.decipherOnly >> 8)) || (k.getPadBits() != 7)) |
|
||||||
{ |
|
||||||
fail("failed decipherOnly"); |
|
||||||
} |
|
||||||
|
|
||||||
// test for zero length bit string
|
|
||||||
try |
|
||||||
{ |
|
||||||
ASN1Primitive.fromByteArray(new DERBitString(new byte[0], 0).getEncoded()); |
|
||||||
} |
|
||||||
catch (IOException e) |
|
||||||
{ |
|
||||||
fail(e.toString()); |
|
||||||
} |
|
||||||
|
|
||||||
testRandomPadBits(); |
|
||||||
testZeroLengthStrings(); |
|
||||||
} |
|
||||||
|
|
||||||
public String getName() |
|
||||||
{ |
|
||||||
return "BitString"; |
|
||||||
} |
|
||||||
|
|
||||||
public static void main( |
|
||||||
String[] args) |
|
||||||
{ |
|
||||||
BitStringTest test = new BitStringTest(); |
|
||||||
TestResult result = test.perform(); |
|
||||||
|
|
||||||
System.out.println(result); |
|
||||||
} |
|
||||||
} |
|
@ -1,97 +0,0 @@ |
|||||||
package com.fr.third.org.bouncycastle.asn1.test; |
|
||||||
|
|
||||||
|
|
||||||
import com.fr.third.org.bouncycastle.asn1.cmc.BodyPartID; |
|
||||||
import com.fr.third.org.bouncycastle.util.test.SimpleTest; |
|
||||||
|
|
||||||
public class BodyPartIDTest |
|
||||||
extends SimpleTest |
|
||||||
{ |
|
||||||
|
|
||||||
|
|
||||||
public void performTest() |
|
||||||
throws Exception |
|
||||||
{ |
|
||||||
// Test correct encode / decode
|
|
||||||
|
|
||||||
|
|
||||||
{ |
|
||||||
// Test encode and decode from Long and from other instance of BodyPartID
|
|
||||||
BodyPartID bpd = new BodyPartID(10L); |
|
||||||
byte[] b = bpd.getEncoded(); |
|
||||||
BodyPartID resBpd = BodyPartID.getInstance(b); |
|
||||||
isEquals("Correct / Encode byte array", resBpd.getID(), bpd.getID()); |
|
||||||
|
|
||||||
BodyPartID rootPartID = new BodyPartID(12L); |
|
||||||
bpd = BodyPartID.getInstance(rootPartID); |
|
||||||
b = bpd.getEncoded(); |
|
||||||
resBpd = BodyPartID.getInstance(b); |
|
||||||
isEquals("Correct / Encode byte array", resBpd.getID(), rootPartID.getID()); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
{ |
|
||||||
// Test lower limit, should not throw exception
|
|
||||||
try |
|
||||||
{ |
|
||||||
new BodyPartID(0); |
|
||||||
} |
|
||||||
catch (Throwable t) |
|
||||||
{ |
|
||||||
fail("Unexpected exception: " + t.getMessage(), t); |
|
||||||
} |
|
||||||
|
|
||||||
// Test below lower range
|
|
||||||
try |
|
||||||
{ |
|
||||||
new BodyPartID(-1); |
|
||||||
fail("Expecting IllegalArgumentException because of outside lower range"); |
|
||||||
} |
|
||||||
catch (Throwable e) |
|
||||||
{ |
|
||||||
if (!(e instanceof IllegalArgumentException)) |
|
||||||
{ |
|
||||||
fail("Expecting only IllegalArgumentException, got:" + e.getMessage(), e); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
{ |
|
||||||
// Test upper limit, should not throw exception.
|
|
||||||
try |
|
||||||
{ |
|
||||||
new BodyPartID(4294967295L); |
|
||||||
} |
|
||||||
catch (Throwable t) |
|
||||||
{ |
|
||||||
fail("Unexpected exception: " + t.getMessage(), t); |
|
||||||
} |
|
||||||
|
|
||||||
// Test above upper range
|
|
||||||
try |
|
||||||
{ |
|
||||||
new BodyPartID(4294967296L); |
|
||||||
fail("Expecting IllegalArgumentException because of outside upper range"); |
|
||||||
} |
|
||||||
catch (Throwable e) |
|
||||||
{ |
|
||||||
if (!(e instanceof IllegalArgumentException)) |
|
||||||
{ |
|
||||||
fail("Expecting only IllegalArgumentException, got:" + e.getMessage(), e); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public String getName() |
|
||||||
{ |
|
||||||
return "BodyPartIDTest"; |
|
||||||
} |
|
||||||
|
|
||||||
public static void main(String[] args) |
|
||||||
throws Exception |
|
||||||
{ |
|
||||||
runTest(new BodyPartIDTest()); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
@ -1,71 +0,0 @@ |
|||||||
package com.fr.third.org.bouncycastle.asn1.test; |
|
||||||
|
|
||||||
import java.util.Random; |
|
||||||
|
|
||||||
import com.fr.third.org.bouncycastle.asn1.DERSequence; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.cmc.BodyPartID; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.cmc.BodyPartList; |
|
||||||
import com.fr.third.org.bouncycastle.util.test.SimpleTest; |
|
||||||
|
|
||||||
|
|
||||||
/** |
|
||||||
* Test the creation of BodyPartListTest and encoding and decoding. |
|
||||||
*/ |
|
||||||
public class BodyPartListTest |
|
||||||
extends SimpleTest |
|
||||||
{ |
|
||||||
|
|
||||||
public void performTest() |
|
||||||
throws Exception |
|
||||||
{ |
|
||||||
Random rand = new Random(); |
|
||||||
{ |
|
||||||
BodyPartID[] bpid = new BodyPartID[Math.abs(rand.nextInt()) % 20]; |
|
||||||
for (int t = 0; t < bpid.length; t++) |
|
||||||
{ |
|
||||||
bpid[t] = new BodyPartID(Math.abs(rand.nextLong() % 4294967295L)); |
|
||||||
} |
|
||||||
BodyPartList bpl = new BodyPartList(bpid); |
|
||||||
DERSequence _bpl = (DERSequence)bpl.toASN1Primitive(); |
|
||||||
byte[] b = bpl.getEncoded(); |
|
||||||
|
|
||||||
//
|
|
||||||
// Decode and compare results.
|
|
||||||
//
|
|
||||||
|
|
||||||
BodyPartList resList = BodyPartList.getInstance(b); |
|
||||||
DERSequence _resList = (DERSequence)resList.toASN1Primitive(); |
|
||||||
|
|
||||||
isEquals(_bpl.size(), _resList.size()); |
|
||||||
|
|
||||||
for (int j = 0; j < _bpl.size(); j++) |
|
||||||
{ |
|
||||||
isEquals(_resList.getObjectAt(j), _bpl.getObjectAt(j)); |
|
||||||
} |
|
||||||
} |
|
||||||
{ |
|
||||||
//
|
|
||||||
// Compare when same thing instantiated via different constructors.
|
|
||||||
//
|
|
||||||
|
|
||||||
BodyPartID bpid = new BodyPartID(Math.abs(rand.nextLong() % 4294967295L)); |
|
||||||
BodyPartList bpidList = new BodyPartList(bpid); // Single entry constructor.
|
|
||||||
BodyPartList resList = new BodyPartList(new BodyPartID[]{bpid}); // Array constructor.
|
|
||||||
|
|
||||||
DERSequence _bpidList = (DERSequence)bpidList.toASN1Primitive(); |
|
||||||
DERSequence _resList = (DERSequence)resList.toASN1Primitive(); |
|
||||||
|
|
||||||
isEquals(_bpidList, _resList); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public String getName() |
|
||||||
{ |
|
||||||
return "BodyPartListTest"; |
|
||||||
} |
|
||||||
|
|
||||||
public static void main(String[] args) |
|
||||||
{ |
|
||||||
runTest(new BodyPartListTest()); |
|
||||||
} |
|
||||||
} |
|
@ -1,69 +0,0 @@ |
|||||||
package com.fr.third.org.bouncycastle.asn1.test; |
|
||||||
|
|
||||||
|
|
||||||
import java.util.Random; |
|
||||||
|
|
||||||
import com.fr.third.org.bouncycastle.asn1.DERSequence; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.cmc.BodyPartID; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.cmc.BodyPartPath; |
|
||||||
import com.fr.third.org.bouncycastle.util.test.SimpleTest; |
|
||||||
|
|
||||||
public class BodyPartPathTest |
|
||||||
extends SimpleTest |
|
||||||
{ |
|
||||||
|
|
||||||
public void performTest() |
|
||||||
throws Exception |
|
||||||
{ |
|
||||||
Random rand = new Random(); |
|
||||||
{ |
|
||||||
BodyPartID[] bpid = new BodyPartID[Math.abs(rand.nextInt()) % 20]; |
|
||||||
for (int t = 0; t < bpid.length; t++) |
|
||||||
{ |
|
||||||
bpid[t] = new BodyPartID(Math.abs(rand.nextLong() % 4294967295L)); |
|
||||||
} |
|
||||||
BodyPartPath bpp = new BodyPartPath(bpid); |
|
||||||
DERSequence _bpp = (DERSequence)bpp.toASN1Primitive(); |
|
||||||
byte[] b = bpp.getEncoded(); |
|
||||||
|
|
||||||
//
|
|
||||||
// Decode and compare results.
|
|
||||||
//
|
|
||||||
|
|
||||||
BodyPartPath resList = BodyPartPath.getInstance(b); |
|
||||||
DERSequence _resList = (DERSequence)resList.toASN1Primitive(); |
|
||||||
|
|
||||||
isEquals(_bpp.size(), _resList.size()); |
|
||||||
|
|
||||||
for (int j = 0; j < _bpp.size(); j++) |
|
||||||
{ |
|
||||||
isEquals(_resList.getObjectAt(j), _bpp.getObjectAt(j)); |
|
||||||
} |
|
||||||
} |
|
||||||
{ |
|
||||||
//
|
|
||||||
// Compare when same thing instantiated via different constructors.
|
|
||||||
//
|
|
||||||
|
|
||||||
BodyPartID bpid = new BodyPartID(Math.abs(rand.nextLong() % 4294967295L)); |
|
||||||
BodyPartPath bpidList = new BodyPartPath(bpid); // Single entry constructor.
|
|
||||||
BodyPartPath resList = new BodyPartPath(new BodyPartID[]{bpid}); // Array constructor.
|
|
||||||
|
|
||||||
DERSequence _bpidList = (DERSequence)bpidList.toASN1Primitive(); |
|
||||||
DERSequence _resList = (DERSequence)resList.toASN1Primitive(); |
|
||||||
|
|
||||||
isEquals(_bpidList, _resList); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public String getName() |
|
||||||
{ |
|
||||||
return "BodyPartPathTest"; |
|
||||||
} |
|
||||||
|
|
||||||
public static void main(String[] args) |
|
||||||
{ |
|
||||||
runTest(new BodyPartPathTest()); |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
@ -1,79 +0,0 @@ |
|||||||
package com.fr.third.org.bouncycastle.asn1.test; |
|
||||||
|
|
||||||
import java.util.Random; |
|
||||||
|
|
||||||
import com.fr.third.org.bouncycastle.asn1.cmc.BodyPartID; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.cmc.BodyPartPath; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.cmc.BodyPartReference; |
|
||||||
import com.fr.third.org.bouncycastle.util.test.SimpleTest; |
|
||||||
|
|
||||||
|
|
||||||
public class BodyPartReferenceTest |
|
||||||
extends SimpleTest |
|
||||||
{ |
|
||||||
|
|
||||||
public String getName() |
|
||||||
{ |
|
||||||
return "BodyPartReferenceTest"; |
|
||||||
} |
|
||||||
|
|
||||||
public void performTest() |
|
||||||
throws Exception |
|
||||||
{ |
|
||||||
Random rand = new Random(); |
|
||||||
BodyPartReference ch0 = null; |
|
||||||
BodyPartReference ch1 = null; |
|
||||||
{ |
|
||||||
// Choice 1
|
|
||||||
BodyPartID id = new BodyPartID(Math.abs(rand.nextLong() % 4294967295L)); |
|
||||||
|
|
||||||
ch0 = new BodyPartReference(id); |
|
||||||
byte[] b = ch0.getEncoded(); |
|
||||||
|
|
||||||
BodyPartReference brRes = BodyPartReference.getInstance(b); |
|
||||||
isEquals(brRes, ch0); |
|
||||||
} |
|
||||||
|
|
||||||
{ |
|
||||||
// Choice 2
|
|
||||||
|
|
||||||
BodyPartID[] bpid = new BodyPartID[Math.abs(rand.nextInt()) % 20]; |
|
||||||
for (int t = 0; t < bpid.length; t++) |
|
||||||
{ |
|
||||||
bpid[t] = new BodyPartID(Math.abs(rand.nextLong() % 4294967295L)); |
|
||||||
} |
|
||||||
|
|
||||||
ch1 = new BodyPartReference(new BodyPartPath(bpid)); |
|
||||||
byte[] b = ch1.getEncoded(); |
|
||||||
|
|
||||||
BodyPartReference brRes = BodyPartReference.getInstance(b); |
|
||||||
isEquals(brRes, ch1); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
{ |
|
||||||
// Test choice alternatives are not equal.
|
|
||||||
BodyPartID id = new BodyPartID(Math.abs(rand.nextLong() % 4294967295L)); |
|
||||||
|
|
||||||
ch0 = new BodyPartReference(id); |
|
||||||
ch1 = new BodyPartReference(new BodyPartPath(id)); |
|
||||||
|
|
||||||
try |
|
||||||
{ |
|
||||||
isEquals(ch0, ch1); |
|
||||||
fail("Must not be equal."); |
|
||||||
} |
|
||||||
catch (Throwable t) |
|
||||||
{ |
|
||||||
// Ignored
|
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
public static void main(String[] args) |
|
||||||
{ |
|
||||||
runTest(new BodyPartReferenceTest()); |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
@ -1,76 +0,0 @@ |
|||||||
package com.fr.third.org.bouncycastle.asn1.test; |
|
||||||
|
|
||||||
import com.fr.third.org.bouncycastle.asn1.ASN1Encoding; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.cmc.CertificationRequest; |
|
||||||
import com.fr.third.org.bouncycastle.util.Arrays; |
|
||||||
import com.fr.third.org.bouncycastle.util.encoders.Base64; |
|
||||||
import com.fr.third.org.bouncycastle.util.test.SimpleTest; |
|
||||||
|
|
||||||
public class CMCCertificationRequestTest |
|
||||||
extends SimpleTest |
|
||||||
{ |
|
||||||
byte[] req1 = Base64.decode( |
|
||||||
"MIHoMIGTAgEAMC4xDjAMBgNVBAMTBVRlc3QyMQ8wDQYDVQQKEwZBbmFUb20xCzAJBgNVBAYTAlNF" |
|
||||||
+ "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALlEt31Tzt2MlcOljvacJgzQVhmlMoqAOgqJ9Pgd3Gux" |
|
||||||
+ "Z7/WcIlgW4QCB7WZT21O1YoghwBhPDMcNGrHei9kHQkCAwEAAaAAMA0GCSqGSIb3DQEBBQUAA0EA" |
|
||||||
+ "NDEI4ecNtJ3uHwGGlitNFq9WxcoZ0djbQJ5hABMotav6gtqlrwKXY2evaIrsNwkJtNdwwH18aQDU" |
|
||||||
+ "KCjOuBL38Q=="); |
|
||||||
|
|
||||||
byte[] req2 = Base64.decode( |
|
||||||
"MIIB6TCCAVICAQAwgagxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRQwEgYDVQQH" |
|
||||||
+ "EwtTYW50YSBDbGFyYTEMMAoGA1UEChMDQUJCMVEwTwYDVQQLHEhQAAAAAAAAAG8AAAAAAAAAdwAA" |
|
||||||
+ "AAAAAABlAAAAAAAAAHIAAAAAAAAAIAAAAAAAAABUAAAAAAAAABxIAAAAAAAARAAAAAAAAAAxDTAL" |
|
||||||
+ "BgNVBAMTBGJsdWUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANETRZ+6occCOrFxNhfKIp4C" |
|
||||||
+ "mMkxwhBNb7TnnahpbM9O0r4hrBPcfYuL7u9YX/jN0YNUP+/CiT39HhSe/bikaBPDEyNsl988I8vX" |
|
||||||
+ "piEdgxYq/+LTgGHbjRsRYCkPtmzwBbuBldNF8bV7pu0v4UScSsExmGqqDlX1TbPU8KkPU1iTAgMB" |
|
||||||
+ "AAGgADANBgkqhkiG9w0BAQQFAAOBgQAFbrs9qUwh93CtETk7DeUD5HcdCnxauo1bck44snSV6MZV" |
|
||||||
+ "OCIGaYu1501kmhEvAtVVRr6SEHwimfQDDIjnrWwYsEr/DT6tkTZAbfRd3qUu3iKjT0H0vlUZp0hJ" |
|
||||||
+ "66mINtBM84uZFBfoXiWY8M3FuAnGmvy6ah/dYtJorTxLKiGkew=="); |
|
||||||
|
|
||||||
public String getName() |
|
||||||
{ |
|
||||||
return "CMCCertificationRequestTest"; |
|
||||||
} |
|
||||||
|
|
||||||
public void certReqTest( |
|
||||||
String testName, |
|
||||||
byte[] req) |
|
||||||
throws Exception |
|
||||||
{ |
|
||||||
CertificationRequest r = CertificationRequest.getInstance(req); |
|
||||||
|
|
||||||
byte[] bytes = r.getEncoded(ASN1Encoding.DER); |
|
||||||
|
|
||||||
if (bytes.length != req.length) |
|
||||||
{ |
|
||||||
fail(testName + " failed length test"); |
|
||||||
} |
|
||||||
|
|
||||||
for (int i = 0; i != req.length; i++) |
|
||||||
{ |
|
||||||
if (bytes[i] != req[i]) |
|
||||||
{ |
|
||||||
fail(testName + " failed comparison test"); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public void performTest() |
|
||||||
throws Exception |
|
||||||
{ |
|
||||||
certReqTest("req1", req1); |
|
||||||
certReqTest("req2", req2); |
|
||||||
|
|
||||||
CertificationRequest a = CertificationRequest.getInstance(req1); |
|
||||||
CertificationRequest b = new CertificationRequest(a.getSubject(), a.getSubjectPublicKeyAlgorithm(), a.getSubjectPublicKey(), a.getAttributes(), a.getSignatureAlgorithm(), a.getSignature()); |
|
||||||
|
|
||||||
isTrue(Arrays.areEqual(a.getEncoded(), b.getEncoded())); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
public static void main( |
|
||||||
String[] args) |
|
||||||
{ |
|
||||||
runTest(new CMCCertificationRequestTest()); |
|
||||||
} |
|
||||||
} |
|
@ -1,96 +0,0 @@ |
|||||||
package com.fr.third.org.bouncycastle.asn1.test; |
|
||||||
|
|
||||||
import java.lang.reflect.Field; |
|
||||||
import java.util.HashMap; |
|
||||||
import java.util.Iterator; |
|
||||||
import java.util.Map; |
|
||||||
|
|
||||||
import com.fr.third.org.bouncycastle.asn1.ASN1Integer; |
|
||||||
import com.fr.third.org.bouncycastle.asn1.cmc.CMCFailInfo; |
|
||||||
import com.fr.third.org.bouncycastle.util.test.SimpleTest; |
|
||||||
|
|
||||||
public class CMCFailInfoTest |
|
||||||
extends SimpleTest |
|
||||||
{ |
|
||||||
|
|
||||||
// From Page 68, CMC: Structures RFC 5272
|
|
||||||
private static Object[][] types = new Object[][]{ |
|
||||||
{"badAlg", new Long(0L) }, |
|
||||||
{"badMessageCheck", new Long(1L) }, |
|
||||||
{"badRequest", new Long(2L) }, |
|
||||||
{"badTime", new Long(3L) }, |
|
||||||
{"badCertId", new Long(4L) }, |
|
||||||
{"unsupportedExt", new Long(5L) }, |
|
||||||
{"mustArchiveKeys", new Long(6L) }, |
|
||||||
{"badIdentity", new Long(7L) }, |
|
||||||
{"popRequired", new Long(8L) }, |
|
||||||
{"popFailed", new Long(9L) }, |
|
||||||
{"noKeyReuse", new Long(10L) }, |
|
||||||
{"internalCAError", new Long(11L) }, |
|
||||||
{"tryLater", new Long(12L) }, |
|
||||||
{"authDataFail", new Long(13L)} |
|
||||||
}; |
|
||||||
private static Map typesMap = new HashMap(); |
|
||||||
|
|
||||||
static |
|
||||||
{ |
|
||||||
for (int t = 0; t < types.length; t++) |
|
||||||
{ |
|
||||||
typesMap.put(types[t][1], types[t][0]); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
public void performTest() |
|
||||||
throws Exception |
|
||||||
{ |
|
||||||
|
|
||||||
//
|
|
||||||
// Check that range has changed and this test has not been updated or vice versa.
|
|
||||||
// It is intended to act as a double check on the addition of CMCFailInfo presets by
|
|
||||||
// requiring this test to be updated equally to ensure it will pass.
|
|
||||||
//
|
|
||||||
|
|
||||||
Field rangeField = CMCFailInfo.class.getDeclaredField("range"); |
|
||||||
rangeField.setAccessible(true); |
|
||||||
|
|
||||||
Map range = (Map)rangeField.get(null); |
|
||||||
|
|
||||||
isEquals("Range in CMCFailInfo does not match test data.",range.size(), types.length); |
|
||||||
|
|
||||||
for (Iterator rangeKeys = range.keySet().iterator(); rangeKeys.hasNext(); ) |
|
||||||
{ Object j = rangeKeys.next(); |
|
||||||
if (!typesMap.containsKey(new Long(((ASN1Integer)j).getValue().longValue()))) { |
|
||||||
fail("The 'range' map in CMCFailInfo contains a value not in the test ('typesMap') map, value was: "+j.toString()); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
for (Iterator typeKeys = typesMap.keySet().iterator(); typeKeys.hasNext(); ) |
|
||||||
{ Object j = typeKeys.next(); |
|
||||||
if (!range.containsKey(new ASN1Integer(((Long)j).longValue()))) { |
|
||||||
fail("The 'typesMap' map in CMCFailInfoTest contains a value not in the CMCFailInfo ('range') map, value was: "+j.toString()); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Test encoding / decoding
|
|
||||||
//
|
|
||||||
|
|
||||||
byte[] b = CMCFailInfo.authDataFail.getEncoded(); |
|
||||||
CMCFailInfo r = CMCFailInfo.getInstance(b); |
|
||||||
isEquals(r,CMCFailInfo.authDataFail); |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
public String getName() |
|
||||||
{ |
|
||||||
return "CMCFailInfoTest"; |
|
||||||
} |
|
||||||
|
|
||||||
public static void main(String[] args) |
|
||||||
{ |
|
||||||
runTest(new CMCFailInfoTest()); |
|
||||||
} |
|
||||||
} |
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue