]> git.lizzy.rs Git - plan9front.git/blobdiff - sys/include/libsec.h
import E script from bell labs
[plan9front.git] / sys / include / libsec.h
index 3bde793236b8d523b776e38f75a34a36d171bf16..d8d4852d5cbf0d0a43b838f750f8c5c594fcc8fb 100644 (file)
@@ -23,7 +23,6 @@ struct AESstate
        ulong   setup;
        int     rounds;
        int     keybytes;
-       uint    ctrsz;
        uchar   key[AESmaxkey];                 /* unexpanded key */
        ulong   ekey[4*(AESmaxrounds + 1)];     /* encryption key */
        ulong   dkey[4*(AESmaxrounds + 1)];     /* decryption key */
@@ -38,8 +37,6 @@ void  aes_decrypt(ulong rk[], int Nr, uchar ct[16], uchar pt[16]);
 void   setupAESstate(AESstate *s, uchar key[], int keybytes, uchar *ivec);
 void   aesCBCencrypt(uchar *p, int len, AESstate *s);
 void   aesCBCdecrypt(uchar *p, int len, AESstate *s);
-void   aesCTRdecrypt(uchar *p, int len, AESstate *s);
-void   aesCTRencrypt(uchar *p, int len, AESstate *s);
 
 void   setupAESXCBCstate(AESstate *s);
 uchar* aesXCBCmac(uchar *p, int len, AESstate *s);
@@ -386,6 +383,7 @@ typedef struct TLSconn{
        uchar   *sessionKey;
        int     sessionKeylen;
        char    *sessionConst;
+       char    *serverName;
 } TLSconn;
 
 /* tlshand.c */
@@ -403,4 +401,79 @@ PEMChain*readcertchain(char *filename);
 
 /* aes_xts.c */
 int aes_xts_encrypt(ulong tweak[], ulong ecb[],  vlong sectorNumber, uchar *input, uchar *output, ulong len) ;
-int aes_xts_decrypt(ulong tweak[], ulong ecb[], vlong sectorNumber, uchar *input, uchar *output, ulong len);
\ No newline at end of file
+int aes_xts_decrypt(ulong tweak[], ulong ecb[], vlong sectorNumber, uchar *input, uchar *output, ulong len);
+
+/*
+ * ECC
+ */
+
+/* ids for ecnamedcurve */
+enum
+{
+       Secp256r1       = 23,
+};
+
+typedef struct ECpoint{
+       int inf;
+       mpint *x;
+       mpint *y;
+} ECpoint;
+
+typedef ECpoint ECpub;
+typedef struct ECpriv{
+       ECpoint;
+       mpint *d;
+} ECpriv;
+
+typedef struct ECdomain{
+       mpint *p;
+       mpint *a;
+       mpint *b;
+       ECpoint *G;
+       mpint *n;
+       mpint *h;
+} ECdomain;
+
+ECdomain*      ecnamedcurve(int);
+void   ecfreepoint(ECpoint*);
+void   ecfreepriv(ECpriv*);
+void   ecfreedomain(ECdomain*);
+void   ecassign(ECdomain *, ECpoint *old, ECpoint *new);
+void   ecadd(ECdomain *, ECpoint *a, ECpoint *b, ECpoint *s);
+void   ecmul(ECdomain *, ECpoint *a, mpint *k, ECpoint *s);
+ECpoint*       betoec(ECdomain*, uchar*, int, ECpoint*);
+ECpoint*       strtoec(ECdomain *, char *, char **, ECpoint*);
+ECpriv*        ecgen(ECdomain *, ECpriv*);
+int    ecverify(ECdomain *, ECpoint *);
+int    ecpubverify(ECdomain *, ECpub *);
+void   ecdsasign(ECdomain *, ECpriv *, uchar *, int, mpint *, mpint *);
+int    ecdsaverify(ECdomain *, ECpub *, uchar *, int, mpint *, mpint *);
+void   base58enc(uchar *, char *, int);
+int    base58dec(char *, uchar *, int);
+
+DigestState*   ripemd160(uchar *, ulong, uchar *, DigestState *);
+
+/*
+ * Diffie-Hellman key exchange
+ */
+
+typedef struct DHstate DHstate;
+struct DHstate
+{
+       mpint   *g;     /* base g */
+       mpint   *p;     /* large prime */
+       mpint   *x;     /* random secret */
+       mpint   *y;     /* public key y = g ^ x % p */
+};
+
+/* generate new public key: y = g ^ x % p */
+mpint* dh_new(DHstate *dh, mpint *p, mpint *g);
+
+/* calculate shared key: k = pub ^ x % p */
+mpint* dh_finish(DHstate *dh, mpint *pub);
+
+/* constant-time comparison similar to memcmp(2) */
+int constcmp(uchar *x, uchar *y, int len);
+
+/* password-based key derivation function 2 (RFC 2898) */
+void pbkdf2_hmac_sha1(uchar *p, ulong plen, uchar *s, ulong slen, ulong rounds, uchar *d, ulong dlen);