]> granicus.if.org Git - curl/commitdiff
axtls: define curlssl_random using axTLS's PRNG
authorDan Fandrich <dan@coneharvesters.com>
Wed, 30 Jul 2014 23:03:30 +0000 (01:03 +0200)
committerDan Fandrich <dan@coneharvesters.com>
Wed, 30 Jul 2014 23:12:38 +0000 (01:12 +0200)
lib/vtls/axtls.c
lib/vtls/axtls.h

index 36cb7ad65a7788e64d8c078613c0b90737d93d6d..1b577b1529db53788ec03c2a66f829e73d9a437a 100644 (file)
@@ -664,4 +664,21 @@ size_t Curl_axtls_version(char *buffer, size_t size)
   return snprintf(buffer, size, "axTLS/%s", ssl_version());
 }
 
+int Curl_axtls_random(struct SessionHandle *data,
+                      unsigned char *entropy,
+                      size_t length)
+{
+  static bool ssl_seeded = FALSE;
+  (void)data;
+  if(!ssl_seeded) {
+    ssl_seeded = TRUE;
+    /* Initialize the seed if not already done. This call is not exactly thread
+     * safe (and neither is the ssl_seeded check), but the worst effect of a
+     * race condition is that some global resources will leak. */
+    RNG_initialize();
+  }
+  get_random(length, entropy);
+  return 0;
+}
+
 #endif /* USE_AXTLS */
index db91365976198f4fac41a1e4ed7f2fe6d12b28b8..55247b8ecaa3efe108e38caa54808b3ee048e169 100644 (file)
@@ -46,6 +46,9 @@ void Curl_axtls_session_free(void *ptr);
 size_t Curl_axtls_version(char *buffer, size_t size);
 int Curl_axtls_shutdown(struct connectdata *conn, int sockindex);
 int Curl_axtls_check_cxn(struct connectdata *conn);
+int Curl_axtls_random(struct SessionHandle *data,
+                      unsigned char *entropy,
+                      size_t length);
 
 /* API setup for axTLS */
 #define curlssl_init Curl_axtls_init
@@ -62,6 +65,7 @@ int Curl_axtls_check_cxn(struct connectdata *conn);
 #define curlssl_version Curl_axtls_version
 #define curlssl_check_cxn(x) Curl_axtls_check_cxn(x)
 #define curlssl_data_pending(x,y) (x=x, y=y, 0)
+#define curlssl_random(x,y,z) Curl_axtls_random(x,y,z)
 
 #endif /* USE_AXTLS */
 #endif /* HEADER_CURL_AXTLS_H */