Guía de desarrollo

Local Navigation

Flujos de firma

Puede utilizar las clases SignatureSigner y SignatureVerifier con un flujo de firma. El flujo de firma ( net.rim.device.api.crypto.SignatureSignerOutputStream) le permite escribir los datos en el flujo. Al cerrar el flujo, la firma quedará anexada al mismo.

Ejemplo de código

El siguiente ejemplo muestra cómo utilizar el flujo de firma. Genera un par de claves y, a continuación, obtiene la clave privada. Crea el firmante. Crea los flujos de salida y, a continuación, escribe los datos y los firma. Crea matrices de bytes para la firma. Por último, cierra los flujos de salida y obtiene los contenidos del flujo.

// Generate a key pair that can be used for signing (and
// eventually for verifying).
ECKeyPair keyPair = new ECKeyPair( new ECCryptoSystem() );
// Get the private key for use with the signature signer.
ECPrivateKey privateKey = keyPair.getECPrivateKey();
// Create the signature signer. This example uses ECDSA.
ECDSASignatureSigner signer = new ECDSASignatureSigner( privateKey,
new MD5Digest() );
// Create the output stream for use as the underlying stream.
// This example uses a byte array output stream.
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
// Create the SignatureSignerOutputStream
SignatureSignerOutputStream signerStream = new SignatureSignerOutputStream(
                                                    signer, outputStream );
// Write out the data to be signed.
String info = new String("Hello World");
// Sign this information.
signerStream.write( info.getBytes() );
// Declare the byte arrays for r and s, which represent the signature.
byte[] r = new byte[signer.getRLength()];
byte[] s = new byte[signer.getSLength()];
signer.sign( r, 0, s, 0 );
// Close the output stream (upper layer).
signerStream.close();
// Get the stream contents for later.
byte[] contents = outputStream.toByteArray();
// Close the underlying output stream.
outputStream.close();

Puede utilizar la clase SignatureVerifierInputStream para comprobar la firma que envió para generar la salida en la sección anterior. El siguiente ejemplo de código muestra cómo verificar la firma generada mediante un flujo de salida de firma. Obtiene la clave pública del último ejemplo. Configura el verificador de firma y el flujo de entrada. Lee los datos del flujo y comprueba que la firma es correcta. Por último, imprime el resultado.

// Get the public key from the key pair in the last example.
ECPublicKey publicKey = keyPair.getECPublicKey();
// Set up the ECDSASignatureVerifier.
ECDSASignatureVerifier verifier = new ECDSASignatureVerifier( publicKey,
                  new MD5Digest(), r, 0, s, 0 );
// Set up the input stream (using contents from above).
ByteArrayInputStream inputStream = new ByteArrayInputStream( contents );
// Use this to set up the SignatureVerifierInputStream
SignatureVerifierInputStream verifierStream =
                  new SignatureVerifierInputStream( verifier, inputStream );
// Read the data from the stream.
byte[] data = new byte[verifierStream.available()];
verifierStream.read( data );
// Use the verifier to check if the signature is correct.
boolean result = verifier.verify();
// Print out the result.
System.out.println("Signature verification was " + result + ".");
Tema siguiente: Compendios
Tema anterior: Implementar firmas

¿Le ha resultado útil esta información? Envíenos sus comentarios.