@@ -505,19 +505,31 @@ SignaturePrivateKey::sign(const CipherSuite& suite,
505505{
506506 auto label_plus = mls_1_0_plus (label);
507507 const auto content = tls::marshal (SignContent{ label_plus, message });
508+
509+ if (_sign_func) {
510+ return _sign_func (content);
511+ }
512+
508513 const auto priv = suite.sig ().deserialize_private (data);
509514 return suite.sig ().sign (content, *priv);
510515}
511516
512- SignaturePrivateKey::SignaturePrivateKey (bytes priv_data, bytes pub_data)
517+ SignaturePrivateKey::SignaturePrivateKey (bytes priv_data,
518+ bytes pub_data,
519+ SignerFunc func)
513520 : data(std::move(priv_data))
514521 , public_key{ std::move (pub_data) }
522+ , _sign_func{ std::move (func) }
515523{
516524}
517525
518526void
519527SignaturePrivateKey::set_public_key (CipherSuite suite)
520528{
529+ if (_sign_func) {
530+ throw std::runtime_error (" not implemented" );
531+ }
532+
521533 const auto priv = suite.sig ().deserialize_private (data);
522534 auto pub = priv->public_key ();
523535 public_key.data = suite.sig ().serialize (*pub);
@@ -533,9 +545,19 @@ SignaturePrivateKey::from_jwk(CipherSuite suite, const std::string& json_str)
533545 return { priv_data, pub_data };
534546}
535547
548+ SignaturePrivateKey
549+ SignaturePrivateKey::from_func (SignerFunc func, bytes pub_data)
550+ {
551+ return { bytes (), std::move (pub_data), std::move (func) };
552+ }
553+
536554std::string
537555SignaturePrivateKey::to_jwk (CipherSuite suite) const
538556{
557+ if (_sign_func) {
558+ throw std::runtime_error (" not implemented" );
559+ }
560+
539561 const auto priv = suite.sig ().deserialize_private (data);
540562 return suite.sig ().export_jwk_private (*priv);
541563}
0 commit comments