trsa.3 - plan9port - [fork] Plan 9 from user space
git clone git://src.adamsgaard.dk/plan9port
Log
Files
Refs
README
LICENSE
---
trsa.3 (5070B)
---
     1 .TH RSA 3
     2 .SH NAME
     3 asn1dump,
     4 asn1toRSApriv,
     5 decodepem,
     6 decodepemchain,
     7 rsadecrypt,
     8 rsaencrypt,
     9 rsafill,,
    10 rsagen,
    11 rsaprivalloc,
    12 rsaprivfree,
    13 rsaprivtopub,
    14 rsapuballoc,
    15 rsapubfree,
    16 X509toRSApub,
    17 X509dump,
    18 X509gen,
    19 X509req,
    20 X509verify \- RSA encryption algorithm
    21 .SH SYNOPSIS
    22 .B #include 
    23 .br
    24 .B #include 
    25 .br
    26 .B #include 
    27 .br
    28 .B #include 
    29 .PP
    30 .B
    31 .ta +\w'\fLPEMChain* 'u
    32 RSApriv*        rsagen(int nlen, int elen, int nrep)
    33 .PP
    34 .B
    35 RSApriv*        rsafill(mpint *n, mpint *ek, mpint *dk, mpint *p, mpint *q)
    36 .PP
    37 .B
    38 mpint*        rsaencrypt(RSApub *k, mpint *in, mpint *out)
    39 .PP
    40 .B
    41 mpint*        rsadecrypt(RSApriv *k, mpint *in, mpint *out)
    42 .PP
    43 .B
    44 RSApub*        rsapuballoc(void)
    45 .PP
    46 .B
    47 void        rsapubfree(RSApub*)
    48 .PP
    49 .B
    50 RSApriv*        rsaprivalloc(void)
    51 .PP
    52 .B
    53 void        rsaprivfree(RSApriv*)
    54 .PP
    55 .B
    56 RSApub*        rsaprivtopub(RSApriv*)
    57 .PP
    58 .B
    59 RSApub*        X509toRSApub(uchar *cert, int ncert, char *name, int nname)
    60 .PP
    61 .B
    62 RSApriv*        asn1toRSApriv(uchar *priv, int npriv)
    63 .PP
    64 .B
    65 void                asn1dump(uchar *der, int len)
    66 .PP
    67 .B
    68 uchar*        decodepem(char *s, char *type, int *len)
    69 .PP
    70 .B
    71 PEMChain*        decodepemchain(char *s, char *type)
    72 .PP
    73 .B
    74 void        X509dump(uchar *cert, int ncert)
    75 .PP
    76 .B
    77 uchar*        X509gen(RSApriv *priv, char *subj, ulong valid[2], int *certlen);
    78 .PP
    79 .B
    80 uchar*        X509req(RSApriv *priv, char *subj, int *certlen);
    81 .PP
    82 .B
    83 char* X509verify(uchar *cert, int ncert, RSApub *pk)
    84 .SH DESCRIPTION
    85 .PP
    86 RSA is a public key encryption algorithm.  The owner of a key publishes
    87 the public part of the key:
    88 .EX
    89         struct RSApub
    90         {
    91                 mpint        *n;        // modulus
    92                 mpint        *ek;        // exp (encryption key)
    93         };
    94 .EE
    95 This part can be used for encrypting data (with
    96 .IR rsaencrypt )
    97 to be sent to the owner.
    98 The owner decrypts (with
    99 .IR rsadecrypt )
   100 using his private key:
   101 .EX
   102         struct RSApriv
   103         {
   104                 RSApub        pub;
   105                 mpint        *dk;        // exp (decryption key)
   106         
   107                 // precomputed crt values
   108                 mpint        *p;
   109                 mpint        *q;
   110                 mpint        *kp;        // k mod p-1
   111                 mpint        *kq;        // k mod q-1
   112                 mpint        *c2;        // for converting residues to number
   113         };
   114 .EE
   115 .PP
   116 Keys are generated using
   117 .IR rsagen .
   118 .I Rsagen
   119 takes both bit length of the modulus, the bit length of the
   120 public key exponent, and the number of repetitions of the Miller-Rabin
   121 primality test to run.  If the latter is 0, it does the default number
   122 of rounds.
   123 .I Rsagen
   124 returns a newly allocated structure containing both
   125 public and private keys.
   126 .I Rsaprivtopub
   127 returns a newly allocated copy of the public key
   128 corresponding to the private key.
   129 .PP
   130 .I Rsafill
   131 takes as input the bare minimum pieces of an RSA private key
   132 and computes the rest
   133 .RB ( kp ,
   134 .BR kq ,
   135 and
   136 .BR c2 ).
   137 It returns a new private key.
   138 All the
   139 .BR mpint s
   140 in the key,
   141 even the ones that correspond directly to
   142 .IR rsafill 's
   143 input parameters,
   144 are freshly allocated,
   145 .PP
   146 The routines
   147 .IR rsaalloc ,
   148 .IR rsafree ,
   149 .IR rsapuballoc ,
   150 .IR rsapubfree ,
   151 .IR rsaprivalloc ,
   152 and
   153 .I rsaprivfree
   154 are provided to aid in user provided key I/O.
   155 .PP
   156 Given a binary X.509
   157 .IR cert ,
   158 the routine
   159 .I X509toRSApub
   160 returns the public key and, if
   161 .I name
   162 is not nil, the CN part of the Distinguished Name of the
   163 certificate's Subject.
   164 (This is conventionally a userid or a host DNS name.)
   165 No verification is done of the certificate signature;  the
   166 caller should check the fingerprint,
   167 .IR sha1(cert) ,
   168 against a table or check the certificate by other means.
   169 X.509 certificates are often stored in PEM format; use
   170 .I dec64
   171 to convert to binary before computing the fingerprint or calling
   172 .IR X509toRSApub .
   173 For the special case of
   174 certificates signed by a known trusted key
   175 (in a single step, without certificate chains)
   176 .I X509verify
   177 checks the signature on
   178 .IR cert .
   179 It returns nil if successful, else an error string.
   180 .PP
   181 .I X509dump
   182 prints an X.509 certificate to standard ouptut.
   183 .PP
   184 .I X509gen
   185 creates a self-signed X.509 certificate, given an RSA keypair
   186 .IR priv ,
   187 a issuer/subject string
   188 .IR subj ,
   189 and the starting and ending validity dates,
   190 .IR valid .
   191 Length of the allocated binary certificate is stored in
   192 .IR certlen .
   193 The subject line is conventionally of the form
   194 .EX
   195    "C=US ST=NJ L=07922 O=Lucent OU='Bell Labs' CN=Eric"
   196 .EE
   197 using the quoting conventions of
   198 .I tokenize
   199 (see
   200 .MR getfields (3) ).
   201 .PP
   202 .I X509req
   203 creates an X.509 certification request.
   204 .PP
   205 .I Asn1toRSApriv
   206 converts an ASN1 formatted RSA private key into the corresponding
   207 .B RSApriv
   208 structure.
   209 .PP
   210 .I Asn1dump
   211 prints an ASN1 object to standard output.
   212 .PP
   213 .I Decodepem
   214 takes a zero terminated string,
   215 .IR s ,
   216 and decodes the PEM (privacy-enhanced mail) formatted section for
   217 .I type
   218 within it.
   219 If successful, it returns the decoded section and sets
   220 .BI * len
   221 to its decoded length.
   222 If not, it returns
   223 .BR nil ,
   224 and
   225 .BI * len
   226 is undefined.
   227 .PP
   228 .I Decodepemchain
   229 is similar but expects a sequence of PEM-formatted sections
   230 and returns a linked list of the decodings:
   231 .IP
   232 .EX
   233 typedef struct PEMChain PEMChain
   234 struct PEMChain
   235 {
   236         PEMChain *next;
   237         uchar *pem;
   238         int pemlen;
   239 };
   240 .EE
   241 .SH SOURCE
   242 .B \*9/src/libsec
   243 .SH SEE ALSO
   244 .MR mp (3) ,
   245 .MR aes (3) ,
   246 .MR blowfish (3) ,
   247 .MR des (3) ,
   248 .MR dsa (3) ,
   249 .MR elgamal (3) ,
   250 .MR rc4 (3) ,
   251 .MR sechash (3) ,
   252 .MR prime (3) ,
   253 .MR rand (3)
   254 .\" .IR pem (8)