aboutsummaryrefslogtreecommitdiff
path: root/man/man3/rsa.3
diff options
context:
space:
mode:
Diffstat (limited to 'man/man3/rsa.3')
-rw-r--r--man/man3/rsa.3202
1 files changed, 202 insertions, 0 deletions
diff --git a/man/man3/rsa.3 b/man/man3/rsa.3
new file mode 100644
index 00000000..58537bfa
--- /dev/null
+++ b/man/man3/rsa.3
@@ -0,0 +1,202 @@
+.TH RSA 3
+.SH NAME
+asn1dump,
+asn1toRSApriv,
+decodepem,
+rsadecrypt,
+rsaencrypt,
+rsagen,
+rsaprivalloc,
+rsaprivfree,
+rsaprivtopub,
+rsapuballoc,
+rsapubfree,
+X509toRSApub,
+X509gen,
+X509verify \- RSA encryption algorithm
+.SH SYNOPSIS
+.B #include <u.h>
+.br
+.B #include <libc.h>
+.br
+.B #include <mp.h>
+.br
+.B #include <libsec.h>
+.PP
+.B
+RSApriv* rsagen(int nlen, int elen, int nrep)
+.PP
+.B
+mpint* rsaencrypt(RSApub *k, mpint *in, mpint *out)
+.PP
+.B
+mpint* rsadecrypt(RSApriv *k, mpint *in, mpint *out)
+.PP
+.B
+RSApub* rsapuballoc(void)
+.PP
+.B
+void rsapubfree(RSApub*)
+.PP
+.B
+RSApriv* rsaprivalloc(void)
+.PP
+.B
+void rsaprivfree(RSApriv*)
+.PP
+.B
+RSApub* rsaprivtopub(RSApriv*)
+.PP
+.B
+RSApub* X509toRSApub(uchar *cert, int ncert, char *name, int nname)
+.PP
+.B
+RSApriv* asn1toRSApriv(uchar *priv, int npriv)
+.PP
+.B
+void asn1dump(uchar *der, int len)
+.PP
+.B
+uchar* decodepem(char *s, char *type, int *len)
+.PP
+.B
+uchar* X509gen(RSApriv *priv, char *subj, ulong valid[2], int *certlen);
+.PP
+.B
+uchar* X509req(RSApriv *priv, char *subj, int *certlen);
+.PP
+.B
+char* X509verify(uchar *cert, int ncert, RSApub *pk)
+.SH DESCRIPTION
+.PP
+RSA is a public key encryption algorithm. The owner of a key publishes
+the public part of the key:
+.EX
+ struct RSApub
+ {
+ mpint *n; // modulus
+ mpint *ek; // exp (encryption key)
+ };
+.EE
+This part can be used for encrypting data (with
+.IR rsaencrypt )
+to be sent to the owner.
+The owner decrypts (with
+.IR rsadecrypt )
+using his private key:
+.EX
+ struct RSApriv
+ {
+ RSApub pub;
+ mpint *dk; // exp (decryption key)
+
+ // precomputed crt values
+ mpint *p;
+ mpint *q;
+ mpint *kp; // k mod p-1
+ mpint *kq; // k mod q-1
+ mpint *c2; // for converting residues to number
+ };
+.EE
+.PP
+Keys are generated using
+.IR rsagen .
+.I Rsagen
+takes both bit length of the modulus, the bit length of the
+public key exponent, and the number of repetitions of the Miller-Rabin
+primality test to run. If the latter is 0, it does the default number
+of rounds.
+.I Rsagen
+returns a newly allocated structure containing both
+public and private keys.
+.I Rsaprivtopub
+returns a newly allocated copy of the public key
+corresponding to the private key.
+.PP
+The routines
+.IR rsaalloc ,
+.IR rsafree ,
+.IR rsapuballoc ,
+.IR rsapubfree ,
+.IR rsaprivalloc ,
+and
+.I rsaprivfree
+are provided to aid in user provided key I/O.
+.PP
+Given a binary X.509
+.IR cert ,
+the routine
+.I X509toRSApub
+returns the public key and, if
+.I name
+is not nil, the CN part of the Distinguished Name of the
+certificate's Subject.
+(This is conventionally a userid or a host DNS name.)
+No verification is done of the certificate signature; the
+caller should check the fingerprint,
+.IR sha1(cert) ,
+against a table or check the certificate by other means.
+X.509 certificates are often stored in PEM format; use
+.I dec64
+to convert to binary before computing the fingerprint or calling
+.IR X509toRSApub .
+For the special case of
+certificates signed by a known trusted key
+(in a single step, without certificate chains)
+.I X509verify
+checks the signature on
+.IR cert .
+It returns nil if successful, else an error string.
+.PP
+.I X509gen
+creates a self-signed X.509 certificate, given an RSA keypair
+.IR priv ,
+a issuer/subject string
+.IR subj ,
+and the starting and ending validity dates,
+.IR valid .
+Length of the allocated binary certificate is stored in
+.IR certlen .
+The subject line is conventionally of the form
+.EX
+ "C=US ST=NJ L=07922 O=Lucent OU='Bell Labs' CN=Eric"
+.EE
+using the quoting conventions of
+.IR tokenize (2).
+.PP
+.I Asn1toRSApriv
+converts an ASN1 formatted RSA private key into the corresponding
+.B RSApriv
+structure.
+.PP
+.I Asn1dump
+prints an ASN1 object to standard output.
+.PP
+.I Decodepem
+takes a zero terminated string,
+.IR s ,
+and decodes the PEM (privacy-enhanced mail) formatted section for
+.I type
+within it.
+If successful, it returns the decoded section and sets
+.BI * len
+to its decoded length.
+If not, it returns
+.BR nil ,
+and
+.BI * len
+is undefined.
+.SH SOURCE
+.B /sys/src/libsec
+.SH SEE ALSO
+.IR mp (2),
+.IR aes (2),
+.IR blowfish (2),
+.IR des (2),
+.IR dsa (2),
+.IR elgamal (2),
+.IR rc4 (2),
+.IR sechash (2),
+.IR prime (2),
+.IR rand (2),
+.IR x509 (8)