001: package org.bouncycastle.asn1.test;
002:
003: import java.util.Random;
004:
005: import org.bouncycastle.asn1.ASN1InputStream;
006: import org.bouncycastle.asn1.ASN1OctetString;
007: import org.bouncycastle.asn1.ASN1Sequence;
008: import org.bouncycastle.asn1.DERIA5String;
009: import org.bouncycastle.asn1.DERNull;
010: import org.bouncycastle.asn1.DEROctetString;
011: import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers;
012: import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
013: import org.bouncycastle.asn1.x509.qualified.BiometricData;
014: import org.bouncycastle.asn1.x509.qualified.TypeOfBiometricData;
015: import org.bouncycastle.util.test.SimpleTest;
016:
017: public class BiometricDataUnitTest extends SimpleTest {
018: public String getName() {
019: return "BiometricData";
020: }
021:
022: private byte[] generateHash() {
023: Random rand = new Random();
024: byte[] bytes = new byte[20];
025:
026: rand.nextBytes(bytes);
027:
028: return bytes;
029: }
030:
031: public void performTest() throws Exception {
032: TypeOfBiometricData dataType = new TypeOfBiometricData(
033: TypeOfBiometricData.HANDWRITTEN_SIGNATURE);
034: AlgorithmIdentifier hashAlgorithm = new AlgorithmIdentifier(
035: OIWObjectIdentifiers.idSHA1, new DERNull());
036: ASN1OctetString dataHash = new DEROctetString(generateHash());
037: BiometricData bd = new BiometricData(dataType, hashAlgorithm,
038: dataHash);
039:
040: checkConstruction(bd, dataType, hashAlgorithm, dataHash, null);
041:
042: DERIA5String dataUri = new DERIA5String("http://test");
043:
044: bd = new BiometricData(dataType, hashAlgorithm, dataHash,
045: dataUri);
046:
047: checkConstruction(bd, dataType, hashAlgorithm, dataHash,
048: dataUri);
049:
050: bd = BiometricData.getInstance(null);
051:
052: if (bd != null) {
053: fail("null getInstance() failed.");
054: }
055:
056: try {
057: BiometricData.getInstance(new Object());
058:
059: fail("getInstance() failed to detect bad object.");
060: } catch (IllegalArgumentException e) {
061: // expected
062: }
063: }
064:
065: private void checkConstruction(BiometricData bd,
066: TypeOfBiometricData dataType,
067: AlgorithmIdentifier hashAlgorithm,
068: ASN1OctetString dataHash, DERIA5String dataUri)
069: throws Exception {
070: checkValues(bd, dataType, hashAlgorithm, dataHash, dataUri);
071:
072: bd = BiometricData.getInstance(bd);
073:
074: checkValues(bd, dataType, hashAlgorithm, dataHash, dataUri);
075:
076: ASN1InputStream aIn = new ASN1InputStream(bd.toASN1Object()
077: .getEncoded());
078:
079: ASN1Sequence seq = (ASN1Sequence) aIn.readObject();
080:
081: bd = BiometricData.getInstance(seq);
082:
083: checkValues(bd, dataType, hashAlgorithm, dataHash, dataUri);
084: }
085:
086: private void checkValues(BiometricData bd,
087: TypeOfBiometricData dataType, AlgorithmIdentifier algID,
088: ASN1OctetString dataHash, DERIA5String sourceDataURI) {
089: if (!bd.getTypeOfBiometricData().equals(dataType)) {
090: fail("types don't match.");
091: }
092:
093: if (!bd.getHashAlgorithm().equals(algID)) {
094: fail("hash algorithms don't match.");
095: }
096:
097: if (!bd.getBiometricDataHash().equals(dataHash)) {
098: fail("hash algorithms don't match.");
099: }
100:
101: if (sourceDataURI != null) {
102: if (!bd.getSourceDataUri().equals(sourceDataURI)) {
103: fail("data uris don't match.");
104: }
105: } else if (bd.getSourceDataUri() != null) {
106: fail("data uri found when none expected.");
107: }
108: }
109:
110: public static void main(String[] args) {
111: runTest(new BiometricDataUnitTest());
112: }
113: }
|