2010-01-07 8 views
3

J'essaie d'utiliser BouncyCastle avec android pour implémenter ECDH et EL Gamal. J'ai ajouté le fichier jar bouncycastle (bcprov-jdk16-144.jar) et écrit un code qui fonctionne avec mes ordinateurs jvm mais lorsque je tente et le port à mon application android il lance:Algorithmes de chiffrement Bouncycastle non fournis

java.security.NoSuchAlgorithmException: KeyPairGenerator ECDH implementation not found 

Un échantillon du code est:

Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); 

java.security.KeyPairGenerator keyGen = org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator.getInstance("ECDH", "BC"); 
       ECGenParameterSpec ecSpec = new ECGenParameterSpec("prime192v1"); 

       keyGen.initialize(ecSpec, SecureRandom.getInstance("SHA1PRNG")); 



       KeyPair pair = keyGen.generateKeyPair(); 
       PublicKey pubk = pair.getPublic(); 
       PrivateKey prik = pair.getPrivate(); 

J'ai alors écrit un programme simple pour voir ce que les algorithmes de chiffrement sont disponibles et il a couru sur mon émulateur Android et sur mes ordinateurs JvM le code était:

Set<Provider.Service> rar = new org.bouncycastle.jce.provider.BouncyCastleProvider().getServices(); 
    Iterator<Provider.Service> ir = rar.iterator(); 
    while(ir.hasNext()) 
     System.out.println(ir.next().getAlgorithm()); 

Sur Android, je ne reçois aucun des algorithmes EC alors qu'il fonctionnait normalement sur mon ordinateur ça va.

Je suis aussi obtenir les deux erreurs suivantes lors de la compilation pour un grand nombre de classes de château gonflable:

01-07 17: 17: 42,548: INFO/dalvikvm (1054): DexOpt: ne pas résoudre la classe ambiguë 'Lorg/bouncycastle/asn1/ASN1Encodable;'

01-07 17: 17: 42,548: DEBUG/dalvikvm (1054): DexOpt: non vérification 'LORG/bouncycastle/asn1/ess/OtherSigningCertificate;': plusieurs définitions

Qu'est-ce que je fais mal?

+0

Ok je l'ai maintenant essayé d'ajouter bouncycastle comme un fichier .jar séparé, maintenant, quand je vérifie ce que des algorithmes sont disponibles il dit que ECDH et El Gamal sont tous les deux disponibles mais les mêmes erreurs et exceptions se produisent toujours –

+0

Avez-vous déjà résolu ceci? – mcorley

+0

s'il vous plaît mettre à jour votre question et dites-nous ce que vous avez fait pour le réparer. –

Répondre

1

Je ne sais pas si cela répond à votre question, mais certaines bibliothèques BouncyCastle sont déjà dans le SDK Android. Peut-être que l'erreur sur la classe ambigu est parce que BouncyCastle est déjà inclus dans l'émulateur. Il semble que vous pouvez l'utiliser via le javax.crypto.Cipher class.

+0

Hmm ok cela signifie-t-il que je ne peux pas implémenter les keygenerators sans mettre manuellement le code source? –

+0

Désolé, je n'ai plus d'informations. Ce que je vous ai déjà dit que j'ai trouvé via Google. – bramp

1

Si vous parcourez le code Android, toutes les fonctionnalités de BouncyCastle ne sont pas incluses. voir libcore/sécurité/src/main/java/org/bouncycastle/jce/fournisseur/BouncyCastleProvider.java

En particulier, la sortie de ECDH est commenté, ce qui signifie à la compilation, il sera complètement à l'écart de l'androïde fichier jar.

9

Vous voulez probablement Spongy Castle - un reconditionnement que j'ai fait de Bouncy Castle spécifiquement ciblé pour Android. Comme il est indiqué ici:

http://code.google.com/p/android/issues/detail?id=3280

... la plate-forme Android intègre malheureusement une version allégée du château Bouncy, ce qui rend également l'installation d'une version mise à jour des bibliothèques difficiles en raison de conflits classloader - même lorsque vous ajoutez votre pot BC complet, vous n'obtenez pas les classes supplémentaires que vous avez ajoutées. Spongy Castle est un remplacement complet pour les versions estropiées des bibliothèques cryptographiques Bouncy Castle livrées avec Android. Il y a quelques petits changements pour le faire fonctionner sur Android:

  • tous les noms de paquets ont été déplacés de org.bouncycastle. * À org.spongycastle.* - donc pas en conflit classloader
  • l'API Java de sécurité Nom du fournisseur est maintenant SC plutôt que BC