/** * Hidden (package-private) constructor, for internal/unittest usage. */ RSAOAEPPrivateKey(byte[] e, byte[] p, byte[] q, HashType oaepHashType, HashType mgf1HashType, SecureRandom rng) { assert e != null; assert p != null; assert q != null; assert oaepHashType != null; assert mgf1HashType != null; init(e, p, q, oaepHashType, mgf1HashType, rng); }
/** * {@inheritDoc} */ @Override public boolean canDecrypt() { return isInitialized(); }
/** * {@inheritDoc} */ @Override public boolean canEncrypt() { return isInitialized(); }
/** * Hidden (package-private) initializer, for internal/unittest usage. */ void init(byte[] e, byte[] p, byte[] q, HashType oaepHashType, HashType mgf1HashType, SecureRandom rng) { final RSAKeyPair keyPair = RSAKeyPair.fromExponents(e, p, q); final RSAPrivateCrtKeyParameters privParameters = new RSAPrivateCrtKeyParameters( BigIntegers.fromUnsignedByteArray(keyPair.n), BigIntegers.fromUnsignedByteArray(keyPair.e), BigIntegers.fromUnsignedByteArray(keyPair.d), BigIntegers.fromUnsignedByteArray(keyPair.p), BigIntegers.fromUnsignedByteArray(keyPair.q), BigIntegers.fromUnsignedByteArray(keyPair.dP), BigIntegers.fromUnsignedByteArray(keyPair.dQ), BigIntegers.fromUnsignedByteArray(keyPair.qInv)); final AsymmetricBlockCipher decryptor = makeDecryptor(mgf1HashType); // Private key goes together with its public key. final RSAOAEPPublicKey publicKey = new RSAOAEPPublicKey(); publicKey.init(keyPair.n, keyPair.e, oaepHashType, mgf1HashType, rng); state = new RSAOAEPPrivateKey.State(decryptor, privParameters, publicKey, oaepHashType, mgf1HashType, rng); resetDecryptor(); }
public @NonNull AbstractPrivateKey getPrivateKey() { return new RSAOAEPPrivateKey(e, p, q, HashType.SHA1, HashType.SHA1, getRandSeed()); } }
public @NonNull AbstractPublicKey getPublicKey() { return new RSAOAEPPublicKey(n, e, HashType.SHA1, HashType.SHA1, getRandSeed()); }
/** * Hidden (package-private) initializer, for internal/unittest usage. */ void init(byte[] n, byte[] e, HashType oaepHashType, HashType mgf1HashType, SecureRandom rng) { final RSAKeyParameters pubParameters = new RSAKeyParameters( false, BigIntegers.fromUnsignedByteArray(n), BigIntegers.fromUnsignedByteArray(e)); state = new State(makeEncryptor(mgf1HashType), pubParameters, oaepHashType, mgf1HashType, rng); resetEncryptor(); }
public @NonNull AbstractPrivateKey getPrivateKey() { return new RSAOAEPPrivateKey(e, p, q, HashType.SHA1, HashType.SHA1, getRandSalt()); } }
public @NonNull AbstractPublicKey getPublicKey() { return new RSAOAEPPublicKey(n, e, HashType.SHA1, HashType.SHA1, getRandSalt()); }
/** * {@inheritDoc} */ @Override public void generate(int bitStrength, HashType mgf1HashType) { generate(bitStrength, DEFAULT_PUBLIC_EXPONENT, DEFAULT_RSA_CERTAINTY, DEFAULT_OAEP_HASH, mgf1HashType); }
@Override public byte[] sign(InputStream input, HashType hashType) throws EncryptionError, IOException { return privateKey.sign(input, hashType); }
public boolean verify(InputStream source, byte[] signature, HashType hashType) throws IOException { return publicKey.checkSignature(source, signature, hashType); }
public PublicKey() { this.publicKey = new RSAOAEPPublicKey(); }
@Override public int hashCode() { Map<String, Object> a = publicKey .toHash(); byte[] key = (byte[]) a.get("n"); return key[0] + (key[1] << 8) + (key[2] << 16) + (key[3] << 24); }
/** * Hidden (package-private) constructor, for internal/unittest usage. */ RSAOAEPPublicKey(byte[] n, byte[] e, HashType oaepHashType, HashType mgf1HashType, SecureRandom rng) { init(n, e, oaepHashType, mgf1HashType, rng); }
private void setComponents(Binder pp) throws Hashable.Error { publicKey.updateFromHash(pp); cachedHint = null; }
public int getBitStrength() { return publicKey.getBitStrength(); }
private static byte[] MGF(OAEPEncoding oaepEncoding, byte[] Z, int len) { return invokeMaskGeneratorFunction1(oaepEncoding, Z, 0, Z.length, len); }
public PrivateKey(int bitStrength) { privateKey.generate(bitStrength, HashType.SHA1); }
public long getPublicExponent() { Map<String, Object> params = publicKey.toHash(); byte[] arr = (byte[]) params.get("e"); long e = 0; for (int i = 0; i < arr.length; i++) e = (e << 8) | arr[i]; return e; } }