data fixes

This commit is contained in:
Art O Cathain 2014-07-06 17:09:23 +01:00
parent 9032e032ff
commit c05fd07986
2 changed files with 18 additions and 13 deletions

View File

@ -13,10 +13,10 @@ import org.spongycastle.bcpg.SymmetricKeyAlgorithmTags;
import org.spongycastle.bcpg.UserIDPacket; import org.spongycastle.bcpg.UserIDPacket;
import org.spongycastle.bcpg.sig.Features; import org.spongycastle.bcpg.sig.Features;
import org.spongycastle.bcpg.sig.IssuerKeyID; import org.spongycastle.bcpg.sig.IssuerKeyID;
import org.spongycastle.bcpg.sig.KeyExpirationTime;
import org.spongycastle.bcpg.sig.KeyFlags; import org.spongycastle.bcpg.sig.KeyFlags;
import org.spongycastle.bcpg.sig.PreferredAlgorithms; import org.spongycastle.bcpg.sig.PreferredAlgorithms;
import org.spongycastle.bcpg.sig.SignatureCreationTime; import org.spongycastle.bcpg.sig.SignatureCreationTime;
import org.spongycastle.bcpg.sig.SignatureExpirationTime;
import org.spongycastle.openpgp.PGPException; import org.spongycastle.openpgp.PGPException;
import org.spongycastle.openpgp.PGPPublicKey; import org.spongycastle.openpgp.PGPPublicKey;
import org.spongycastle.openpgp.PGPPublicKeyRing; import org.spongycastle.openpgp.PGPPublicKeyRing;
@ -26,6 +26,7 @@ import org.sufficientlysecure.keychain.pgp.UncachedKeyRing;
import java.math.BigInteger; import java.math.BigInteger;
import java.util.Date; import java.util.Date;
import java.util.concurrent.TimeUnit;
/** /**
* Created by art on 05/07/14. * Created by art on 05/07/14.
@ -56,11 +57,11 @@ public class KeyringBuilder {
private static final BigInteger exponent = new BigInteger("010001", 16); private static final BigInteger exponent = new BigInteger("010001", 16);
public static UncachedKeyRing ring1() { public static UncachedKeyRing ring1() {
return ringForModulus(new Date(1404566755), "user1@example.com"); return ringForModulus(new Date(1404566755000L), "OpenKeychain User (NOT A REAL KEY) <openkeychain@example.com>");
} }
public static UncachedKeyRing ring2() { public static UncachedKeyRing ring2() {
return ringForModulus(new Date(1404566755), "user1@example.com"); return ringForModulus(new Date(1404566755000L), "OpenKeychain User (NOT A REAL KEY) <openkeychain@example.com>");
} }
private static UncachedKeyRing ringForModulus(Date date, String userIdString) { private static UncachedKeyRing ringForModulus(Date date, String userIdString) {
@ -91,38 +92,38 @@ public class KeyringBuilder {
private static SignaturePacket createSignaturePacket(Date date) { private static SignaturePacket createSignaturePacket(Date date) {
int signatureType = PGPSignature.POSITIVE_CERTIFICATION; int signatureType = PGPSignature.POSITIVE_CERTIFICATION;
long keyID = 1; long keyID = 0x15130BCF071AE6BFL;
int keyAlgorithm = SignaturePacket.RSA_GENERAL; int keyAlgorithm = SignaturePacket.RSA_GENERAL;
int hashAlgorithm = HashAlgorithmTags.SHA1; int hashAlgorithm = HashAlgorithmTags.SHA1;
SignatureSubpacket[] hashedData = new SignatureSubpacket[]{ SignatureSubpacket[] hashedData = new SignatureSubpacket[]{
new SignatureCreationTime(true, date), new SignatureCreationTime(false, date),
new KeyFlags(true, KeyFlags.SIGN_DATA & KeyFlags.CERTIFY_OTHER), new KeyFlags(false, KeyFlags.CERTIFY_OTHER + KeyFlags.SIGN_DATA),
new SignatureExpirationTime(true, date.getTime() + 24 * 60 * 60 * 2), new KeyExpirationTime(false, TimeUnit.DAYS.toSeconds(2)),
new PreferredAlgorithms(SignatureSubpacketTags.PREFERRED_SYM_ALGS, true, new int[]{ new PreferredAlgorithms(SignatureSubpacketTags.PREFERRED_SYM_ALGS, false, new int[]{
SymmetricKeyAlgorithmTags.AES_256, SymmetricKeyAlgorithmTags.AES_256,
SymmetricKeyAlgorithmTags.AES_192, SymmetricKeyAlgorithmTags.AES_192,
SymmetricKeyAlgorithmTags.AES_128, SymmetricKeyAlgorithmTags.AES_128,
SymmetricKeyAlgorithmTags.CAST5, SymmetricKeyAlgorithmTags.CAST5,
SymmetricKeyAlgorithmTags.TRIPLE_DES SymmetricKeyAlgorithmTags.TRIPLE_DES
}), }),
new PreferredAlgorithms(SignatureSubpacketTags.PREFERRED_HASH_ALGS, true, new int[]{ new PreferredAlgorithms(SignatureSubpacketTags.PREFERRED_HASH_ALGS, false, new int[]{
HashAlgorithmTags.SHA256, HashAlgorithmTags.SHA256,
HashAlgorithmTags.SHA1, HashAlgorithmTags.SHA1,
HashAlgorithmTags.SHA384, HashAlgorithmTags.SHA384,
HashAlgorithmTags.SHA512, HashAlgorithmTags.SHA512,
HashAlgorithmTags.SHA224 HashAlgorithmTags.SHA224
}), }),
new PreferredAlgorithms(SignatureSubpacketTags.PREFERRED_COMP_ALGS, true, new int[]{ new PreferredAlgorithms(SignatureSubpacketTags.PREFERRED_COMP_ALGS, false, new int[]{
CompressionAlgorithmTags.ZLIB, CompressionAlgorithmTags.ZLIB,
CompressionAlgorithmTags.BZIP2, CompressionAlgorithmTags.BZIP2,
CompressionAlgorithmTags.ZLIB CompressionAlgorithmTags.ZIP
}), }),
new Features(false, Features.FEATURE_MODIFICATION_DETECTION), new Features(false, Features.FEATURE_MODIFICATION_DETECTION),
// can't do keyserver prefs // can't do keyserver prefs
}; };
SignatureSubpacket[] unhashedData = new SignatureSubpacket[]{ SignatureSubpacket[] unhashedData = new SignatureSubpacket[]{
new IssuerKeyID(true, new BigInteger("15130BCF071AE6BF", 16).toByteArray()) new IssuerKeyID(false, new BigInteger("15130BCF071AE6BF", 16).toByteArray())
}; };
byte[] fingerPrint = new BigInteger("522c", 16).toByteArray(); byte[] fingerPrint = new BigInteger("522c", 16).toByteArray();
MPInteger[] signature = new MPInteger[]{ MPInteger[] signature = new MPInteger[]{
@ -156,7 +157,7 @@ public class KeyringBuilder {
} }
private static PGPPublicKey createPgpPublicKey(BigInteger modulus, Date date) throws PGPException { private static PGPPublicKey createPgpPublicKey(BigInteger modulus, Date date) throws PGPException {
PublicKeyPacket publicKeyPacket = new PublicKeyPacket(PublicKeyAlgorithmTags.RSA_SIGN, date, new RSAPublicBCPGKey(modulus, exponent)); PublicKeyPacket publicKeyPacket = new PublicKeyPacket(PublicKeyAlgorithmTags.RSA_GENERAL, date, new RSAPublicBCPGKey(modulus, exponent));
return new PGPPublicKey( return new PGPPublicKey(
publicKeyPacket, new BcKeyFingerprintCalculator()); publicKeyPacket, new BcKeyFingerprintCalculator());
} }

View File

@ -9,6 +9,8 @@ import org.sufficientlysecure.keychain.testsupport.*;
import org.sufficientlysecure.keychain.testsupport.KeyringBuilder; import org.sufficientlysecure.keychain.testsupport.KeyringBuilder;
import org.sufficientlysecure.keychain.testsupport.TestDataUtil; import org.sufficientlysecure.keychain.testsupport.TestDataUtil;
import java.io.*;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@org.robolectric.annotation.Config(emulateSdk = 18) // Robolectric doesn't yet support 19 @org.robolectric.annotation.Config(emulateSdk = 18) // Robolectric doesn't yet support 19
public class UncachedKeyringTest { public class UncachedKeyringTest {
@ -17,6 +19,8 @@ public class UncachedKeyringTest {
public void testVerifySuccess() throws Exception { public void testVerifySuccess() throws Exception {
UncachedKeyRing expectedKeyRing = KeyringBuilder.ring2(); UncachedKeyRing expectedKeyRing = KeyringBuilder.ring2();
UncachedKeyRing inputKeyRing = KeyringBuilder.ring1(); UncachedKeyRing inputKeyRing = KeyringBuilder.ring1();
// Uncomment to dump the encoded key for manual inspection
// inputKeyRing.getPublicKey().getPublicKey().encode(new FileOutputStream(new File("/tmp/key-encoded")));
new UncachedKeyringTestingHelper().doTestCanonicalize(inputKeyRing, expectedKeyRing); new UncachedKeyringTestingHelper().doTestCanonicalize(inputKeyRing, expectedKeyRing);
} }