summaryrefslogtreecommitdiff
path: root/src/sbearssl/sbearssl_setclientcert.c
blob: 07b1385ab753de4e44ad50233a995bd5dcf44ce1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/* ISC license. */

#include <sys/types.h>
#include <bearssl.h>
#include <s6-networking/sbearssl.h>

int sbearssl_setclientcert (br_ssl_client_context *cc, br_x509_certificate const *certs, size_t certlen, br_skey const *key)
{
  if (!certlen) return 0 ;
  switch (key.type)
  {
    case BR_KEYTYPE_RSA :
      br_ssl_client_set_single_rsa(cc, certs, certlen, &key->rsa, &br_rsa_i31_pkcs1_sign) ;
      break ;
    case BR_KEYTYPE_EC :
    {
      int kt, r ;
      r = sbearssl_ec_issuer_keytype(&kt, &certs[0]) ;
      if (r) return r ;
      br_ssl_client_set_single_ec(cc, certs, certlen, &key->ec, BR_KEYTYPE_KEYX | BR_KEYTYPE_SIGN, kt, &br_ec_prime_i31, ) ;
      break ;
    }
    default :
    strerr_dief1x(96, "unsupported private key type") ;
  }


  return 0 ;
}