X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=doc%2Fcrypto%2FEVP_PKEY_sign.pod;h=21974b4b1a9cf35888551beba71a278bcefbba8f;hp=63d41c9b054c66d1617036b70a942e050a42217d;hb=d64c533a207f7b6d86c3bc8ffb053e5f4d0c1ca0;hpb=ba544377fb48336b4e29fd494a7faf7c0ba6b1dc diff --git a/doc/crypto/EVP_PKEY_sign.pod b/doc/crypto/EVP_PKEY_sign.pod index 63d41c9b05..21974b4b1a 100644 --- a/doc/crypto/EVP_PKEY_sign.pod +++ b/doc/crypto/EVP_PKEY_sign.pod @@ -2,7 +2,7 @@ =head1 NAME -EVP_PKEY_encrypt_init, EVP_PKEY_encrypt - encrypt using a public key algorithm +EVP_PKEY_sign_init, EVP_PKEY_sign - sign using a public key algorithm =head1 SYNOPSIS @@ -28,9 +28,14 @@ B and the amount of data written to B. =head1 NOTES +EVP_PKEY_sign() does not hash the data to be signed, and therefore is +normally used to sign digests. For signing arbitrary messages, see the +L and +L signing interfaces instead. + After the call to EVP_PKEY_sign_init() algorithm specific control operations can be performed to set any appropriate parameters for the -operation. +operation (see L). The function EVP_PKEY_sign() can be called more than once on the same context if several operations are performed using the same parameters. @@ -43,21 +48,59 @@ indicates the operation is not supported by the public key algorithm. =head1 EXAMPLE -Sign data using PKCS#1 and SHA256 digest: +Sign data using RSA with PKCS#1 padding and SHA256 digest: + + #include + #include + + EVP_PKEY_CTX *ctx; + /* md is a SHA-256 digest in this example. */ + unsigned char *md, *sig; + size_t mdlen = 32, siglen; + EVP_PKEY *signing_key; + + /* + * NB: assumes signing_key and md are set up before the next + * step. signing_key must be an RSA private key and md must + * point to the SHA-256 digest to be signed. + */ + ctx = EVP_PKEY_CTX_new(signing_key, NULL /* no engine */); + if (!ctx) + /* Error occurred */ + if (EVP_PKEY_sign_init(ctx) <= 0) + /* Error */ + if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING) <= 0) + /* Error */ + if (EVP_PKEY_CTX_set_signature_md(ctx, EVP_sha256()) <= 0) + /* Error */ + + /* Determine buffer length */ + if (EVP_PKEY_sign(ctx, NULL, &siglen, md, mdlen) <= 0) + /* Error */ + + sig = OPENSSL_malloc(siglen); + + if (!sig) + /* malloc failure */ + + if (EVP_PKEY_sign(ctx, sig, &siglen, md, mdlen) <= 0) + /* Error */ + + /* Signature is siglen bytes written to buffer sig */ -[to be added] =head1 SEE ALSO L, +L, L, L, L, -L, +L, L =head1 HISTORY -These functions were first added to OpenSSL 0.9.9. +These functions were first added to OpenSSL 1.0.0. =cut