예제 #1
0
 /**
  * Verifies that the signature from the server matches the computed signature on the data. Returns
  * true if the data is correctly signed.
  *
  * @param publicKey public key associated with the developer account
  * @param signedData signed data from server
  * @param signature server signature
  * @return true if the data and signature match
  */
 public static boolean verify(PublicKey publicKey, String signedData, String signature) {
   if (StoreConfig.debug) {
     Log.i(TAG, "signature: " + signature);
   }
   Signature sig;
   try {
     sig = Signature.getInstance(SIGNATURE_ALGORITHM);
     sig.initVerify(publicKey);
     sig.update(signedData.getBytes());
     if (!sig.verify(Base64.decode(signature))) {
       Log.e(TAG, "Signature verification failed.");
       return false;
     }
     return true;
   } catch (NoSuchAlgorithmException e) {
     Log.e(TAG, "NoSuchAlgorithmException.");
   } catch (InvalidKeyException e) {
     Log.e(TAG, "Invalid key specification.");
   } catch (SignatureException e) {
     Log.e(TAG, "Signature exception.");
   } catch (Base64DecoderException e) {
     Log.e(TAG, "Base64 decoding failed.");
   }
   return false;
 }
예제 #2
0
 /**
  * Generates a PublicKey instance from a string containing the Base64-encoded public key.
  *
  * @param encodedPublicKey Base64-encoded public key
  * @throws IllegalArgumentException if encodedPublicKey is invalid
  */
 public static PublicKey generatePublicKey(String encodedPublicKey) {
   try {
     byte[] decodedKey = Base64.decode(encodedPublicKey);
     KeyFactory keyFactory = KeyFactory.getInstance(KEY_FACTORY_ALGORITHM);
     return keyFactory.generatePublic(new X509EncodedKeySpec(decodedKey));
   } catch (NoSuchAlgorithmException e) {
     throw new RuntimeException(e);
   } catch (InvalidKeySpecException e) {
     Log.e(TAG, "Invalid key specification.");
     throw new IllegalArgumentException(e);
   } catch (Base64DecoderException e) {
     Log.e(TAG, "Base64 decoding failed.");
     throw new IllegalArgumentException(e);
   }
 }