blob: bb7f332749f7d4f6a47f8a166ddd436f7b265e7c [file] [log] [blame]
// Copyright 2021 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
///////////////////////////////////////////////////////////////////////////////
#include "tink/experimental/pqcrypto/signature/subtle/sphincs_helper_pqclean.h"
#include <cstddef>
#include <memory>
#include <vector>
#include "absl/memory/memory.h"
extern "C" {
#include "third_party/pqclean/crypto_sign/sphincs-haraka-128f-robust/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-haraka-128f-simple/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-haraka-128s-robust/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-haraka-128s-simple/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-haraka-192f-robust/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-haraka-192f-simple/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-haraka-192s-robust/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-haraka-192s-simple/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-haraka-256f-robust/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-haraka-256f-simple/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-haraka-256s-robust/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-haraka-256s-simple/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-sha256-128f-robust/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-sha256-128f-simple/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-sha256-128s-robust/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-sha256-128s-simple/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-sha256-192f-robust/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-sha256-192f-simple/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-sha256-192s-robust/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-sha256-192s-simple/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-sha256-256f-robust/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-sha256-256f-simple/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-sha256-256s-robust/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-sha256-256s-simple/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-shake256-128f-robust/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-shake256-128f-simple/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-shake256-128s-robust/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-shake256-128s-simple/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-shake256-192f-robust/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-shake256-192f-simple/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-shake256-192s-robust/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-shake256-192s-simple/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-shake256-256f-robust/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-shake256-256f-simple/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-shake256-256s-robust/api.h"
#include "third_party/pqclean/crypto_sign/sphincs-shake256-256s-simple/api.h"
}
#define NUM_VARIANTS 2
#define NUM_KEY_SIZES 3
#define NUM_SIG_LENGTHS 2
namespace crypto {
namespace tink {
namespace subtle {
class SphincsHaraka128FRobustPqclean : public SphincsHelperPqclean {
public:
SphincsHaraka128FRobustPqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSHARAKA128FROBUST_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSHARAKA128FROBUST_CRYPTO_BYTES) {}
~SphincsHaraka128FRobustPqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSHARAKA128FROBUST_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSHARAKA128FROBUST_crypto_sign_verify(
sig, siglen, m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSHARAKA128FROBUST_crypto_sign_keypair(pk, sk);
}
};
class SphincsHaraka128SRobustPqclean : public SphincsHelperPqclean {
public:
SphincsHaraka128SRobustPqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSHARAKA128SROBUST_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSHARAKA128SROBUST_CRYPTO_BYTES) {}
~SphincsHaraka128SRobustPqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSHARAKA128SROBUST_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSHARAKA128SROBUST_crypto_sign_verify(
sig, siglen, m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSHARAKA128SROBUST_crypto_sign_keypair(pk, sk);
}
};
class SphincsHaraka128FSimplePqclean : public SphincsHelperPqclean {
public:
SphincsHaraka128FSimplePqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSHARAKA128FSIMPLE_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSHARAKA128FSIMPLE_CRYPTO_BYTES) {}
~SphincsHaraka128FSimplePqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSHARAKA128FSIMPLE_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSHARAKA128FSIMPLE_crypto_sign_verify(
sig, siglen, m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSHARAKA128FSIMPLE_crypto_sign_keypair(pk, sk);
}
};
class SphincsHaraka128SSimplePqclean : public SphincsHelperPqclean {
public:
SphincsHaraka128SSimplePqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSHARAKA128SSIMPLE_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSHARAKA128SSIMPLE_CRYPTO_BYTES) {}
~SphincsHaraka128SSimplePqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSHARAKA128SSIMPLE_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSHARAKA128SSIMPLE_crypto_sign_verify(
sig, siglen, m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSHARAKA128SSIMPLE_crypto_sign_keypair(pk, sk);
}
};
class SphincsHaraka192FRobustPqclean : public SphincsHelperPqclean {
public:
SphincsHaraka192FRobustPqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSHARAKA192FROBUST_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSHARAKA192FROBUST_CRYPTO_BYTES) {}
~SphincsHaraka192FRobustPqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSHARAKA192FROBUST_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSHARAKA192FROBUST_crypto_sign_verify(
sig, siglen, m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSHARAKA192FROBUST_crypto_sign_keypair(pk, sk);
}
};
class SphincsHaraka192SRobustPqclean : public SphincsHelperPqclean {
public:
SphincsHaraka192SRobustPqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSHARAKA192SROBUST_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSHARAKA192SROBUST_CRYPTO_BYTES) {}
~SphincsHaraka192SRobustPqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSHARAKA192SROBUST_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSHARAKA192SROBUST_crypto_sign_verify(
sig, siglen, m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSHARAKA192SROBUST_crypto_sign_keypair(pk, sk);
}
};
class SphincsHaraka192FSimplePqclean : public SphincsHelperPqclean {
public:
SphincsHaraka192FSimplePqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSHARAKA192FSIMPLE_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSHARAKA192FSIMPLE_CRYPTO_BYTES) {}
~SphincsHaraka192FSimplePqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSHARAKA192FSIMPLE_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSHARAKA192FSIMPLE_crypto_sign_verify(
sig, siglen, m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSHARAKA192FSIMPLE_crypto_sign_keypair(pk, sk);
}
};
class SphincsHaraka192SSimplePqclean : public SphincsHelperPqclean {
public:
SphincsHaraka192SSimplePqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSHARAKA192SSIMPLE_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSHARAKA192SSIMPLE_CRYPTO_BYTES) {}
~SphincsHaraka192SSimplePqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSHARAKA192SSIMPLE_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSHARAKA192SSIMPLE_crypto_sign_verify(
sig, siglen, m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSHARAKA192SSIMPLE_crypto_sign_keypair(pk, sk);
}
};
class SphincsHaraka256FRobustPqclean : public SphincsHelperPqclean {
public:
SphincsHaraka256FRobustPqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSHARAKA256FROBUST_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSHARAKA256FROBUST_CRYPTO_BYTES) {}
~SphincsHaraka256FRobustPqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSHARAKA256FROBUST_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSHARAKA256FROBUST_crypto_sign_verify(
sig, siglen, m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSHARAKA256FROBUST_crypto_sign_keypair(pk, sk);
}
};
class SphincsHaraka256SRobustPqclean : public SphincsHelperPqclean {
public:
SphincsHaraka256SRobustPqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSHARAKA256SROBUST_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSHARAKA256SROBUST_CRYPTO_BYTES) {}
~SphincsHaraka256SRobustPqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSHARAKA256SROBUST_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSHARAKA256SROBUST_crypto_sign_verify(
sig, siglen, m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSHARAKA256SROBUST_crypto_sign_keypair(pk, sk);
}
};
class SphincsHaraka256FSimplePqclean : public SphincsHelperPqclean {
public:
SphincsHaraka256FSimplePqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSHARAKA256FSIMPLE_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSHARAKA256FSIMPLE_CRYPTO_BYTES) {}
~SphincsHaraka256FSimplePqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSHARAKA256FSIMPLE_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSHARAKA256FSIMPLE_crypto_sign_verify(
sig, siglen, m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSHARAKA256FSIMPLE_crypto_sign_keypair(pk, sk);
}
};
class SphincsHaraka256SSimplePqclean : public SphincsHelperPqclean {
public:
SphincsHaraka256SSimplePqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSHARAKA256SSIMPLE_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSHARAKA256SSIMPLE_CRYPTO_BYTES) {}
~SphincsHaraka256SSimplePqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSHARAKA256SSIMPLE_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSHARAKA256SSIMPLE_crypto_sign_verify(
sig, siglen, m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSHARAKA256SSIMPLE_crypto_sign_keypair(pk, sk);
}
};
class SphincsSHA256128FRobustPqclean : public SphincsHelperPqclean {
public:
SphincsSHA256128FRobustPqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSSHA256128FROBUST_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSSHA256128FROBUST_CRYPTO_BYTES) {}
~SphincsSHA256128FRobustPqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHA256128FROBUST_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSSHA256128FROBUST_crypto_sign_verify(sig, siglen,
m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHA256128FROBUST_crypto_sign_keypair(pk, sk);
}
};
class SphincsSHA256128SRobustPqclean : public SphincsHelperPqclean {
public:
SphincsSHA256128SRobustPqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSSHA256128SROBUST_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSSHA256128SROBUST_CRYPTO_BYTES) {}
~SphincsSHA256128SRobustPqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHA256128SROBUST_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSSHA256128SROBUST_crypto_sign_verify(sig, siglen,
m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHA256128SROBUST_crypto_sign_keypair(pk, sk);
}
};
class SphincsSHA256128FSimplePqclean : public SphincsHelperPqclean {
public:
SphincsSHA256128FSimplePqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSSHA256128FSIMPLE_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSSHA256128FSIMPLE_CRYPTO_BYTES) {}
~SphincsSHA256128FSimplePqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHA256128FSIMPLE_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSSHA256128FSIMPLE_crypto_sign_verify(sig, siglen,
m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHA256128FSIMPLE_crypto_sign_keypair(pk, sk);
}
};
class SphincsSHA256128SSimplePqclean : public SphincsHelperPqclean {
public:
SphincsSHA256128SSimplePqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSSHA256128SSIMPLE_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSSHA256128SSIMPLE_CRYPTO_BYTES) {}
~SphincsSHA256128SSimplePqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHA256128SSIMPLE_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSSHA256128SSIMPLE_crypto_sign_verify(sig, siglen,
m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHA256128SSIMPLE_crypto_sign_keypair(pk, sk);
}
};
class SphincsSHA256192FRobustPqclean : public SphincsHelperPqclean {
public:
SphincsSHA256192FRobustPqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSSHA256192FROBUST_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSSHA256192FROBUST_CRYPTO_BYTES) {}
~SphincsSHA256192FRobustPqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHA256192FROBUST_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSSHA256192FROBUST_crypto_sign_verify(sig, siglen,
m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHA256192FROBUST_crypto_sign_keypair(pk, sk);
}
};
class SphincsSHA256192SRobustPqclean : public SphincsHelperPqclean {
public:
SphincsSHA256192SRobustPqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSSHA256192SROBUST_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSSHA256192SROBUST_CRYPTO_BYTES) {}
~SphincsSHA256192SRobustPqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHA256192SROBUST_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSSHA256192SROBUST_crypto_sign_verify(sig, siglen,
m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHA256192SROBUST_crypto_sign_keypair(pk, sk);
}
};
class SphincsSHA256192FSimplePqclean : public SphincsHelperPqclean {
public:
SphincsSHA256192FSimplePqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSSHA256192FSIMPLE_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSSHA256192FSIMPLE_CRYPTO_BYTES) {}
~SphincsSHA256192FSimplePqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHA256192FSIMPLE_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSSHA256192FSIMPLE_crypto_sign_verify(sig, siglen,
m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHA256192FSIMPLE_crypto_sign_keypair(pk, sk);
}
};
class SphincsSHA256192SSimplePqclean : public SphincsHelperPqclean {
public:
SphincsSHA256192SSimplePqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSSHA256192SSIMPLE_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSSHA256192SSIMPLE_CRYPTO_BYTES) {}
~SphincsSHA256192SSimplePqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHA256192SSIMPLE_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSSHA256192SSIMPLE_crypto_sign_verify(sig, siglen,
m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHA256192SSIMPLE_crypto_sign_keypair(pk, sk);
}
};
class SphincsSHA256256FRobustPqclean : public SphincsHelperPqclean {
public:
SphincsSHA256256FRobustPqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSSHA256256FROBUST_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSSHA256256FROBUST_CRYPTO_BYTES) {}
~SphincsSHA256256FRobustPqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHA256256FROBUST_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSSHA256256FROBUST_crypto_sign_verify(sig, siglen,
m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHA256256FROBUST_crypto_sign_keypair(pk, sk);
}
};
class SphincsSHA256256SRobustPqclean : public SphincsHelperPqclean {
public:
SphincsSHA256256SRobustPqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSSHA256256SROBUST_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSSHA256256SROBUST_CRYPTO_BYTES) {}
~SphincsSHA256256SRobustPqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHA256256SROBUST_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSSHA256256SROBUST_crypto_sign_verify(sig, siglen,
m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHA256256SROBUST_crypto_sign_keypair(pk, sk);
}
};
class SphincsSHA256256FSimplePqclean : public SphincsHelperPqclean {
public:
SphincsSHA256256FSimplePqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSSHA256256FSIMPLE_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSSHA256256FSIMPLE_CRYPTO_BYTES) {}
~SphincsSHA256256FSimplePqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHA256256FSIMPLE_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSSHA256256FSIMPLE_crypto_sign_verify(sig, siglen,
m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHA256256FSIMPLE_crypto_sign_keypair(pk, sk);
}
};
class SphincsSHA256256SSimplePqclean : public SphincsHelperPqclean {
public:
SphincsSHA256256SSimplePqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSSHA256256SSIMPLE_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSSHA256256SSIMPLE_CRYPTO_BYTES) {}
~SphincsSHA256256SSimplePqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHA256256SSIMPLE_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSSHA256256SSIMPLE_crypto_sign_verify(sig, siglen,
m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHA256256SSIMPLE_crypto_sign_keypair(pk, sk);
}
};
class SphincsSHAKE256128FRobustPqclean : public SphincsHelperPqclean {
public:
SphincsSHAKE256128FRobustPqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSSHAKE256128FROBUST_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSSHAKE256128FROBUST_CRYPTO_BYTES) {}
~SphincsSHAKE256128FRobustPqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHAKE256128FROBUST_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSSHAKE256128FROBUST_crypto_sign_verify(
sig, siglen, m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHAKE256128FROBUST_crypto_sign_keypair(pk, sk);
}
};
class SphincsSHAKE256128SRobustPqclean : public SphincsHelperPqclean {
public:
SphincsSHAKE256128SRobustPqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSSHAKE256128SROBUST_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSSHAKE256128SROBUST_CRYPTO_BYTES) {}
~SphincsSHAKE256128SRobustPqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHAKE256128SROBUST_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSSHAKE256128SROBUST_crypto_sign_verify(
sig, siglen, m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHAKE256128SROBUST_crypto_sign_keypair(pk, sk);
}
};
class SphincsSHAKE256128FSimplePqclean : public SphincsHelperPqclean {
public:
SphincsSHAKE256128FSimplePqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSSHAKE256128FSIMPLE_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSSHAKE256128FSIMPLE_CRYPTO_BYTES) {}
~SphincsSHAKE256128FSimplePqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHAKE256128FSIMPLE_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSSHAKE256128FSIMPLE_crypto_sign_verify(
sig, siglen, m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHAKE256128FSIMPLE_crypto_sign_keypair(pk, sk);
}
};
class SphincsSHAKE256128SSimplePqclean : public SphincsHelperPqclean {
public:
SphincsSHAKE256128SSimplePqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSSHAKE256128SSIMPLE_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSSHAKE256128SSIMPLE_CRYPTO_BYTES) {}
~SphincsSHAKE256128SSimplePqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHAKE256128SSIMPLE_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSSHAKE256128SSIMPLE_crypto_sign_verify(
sig, siglen, m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHAKE256128SSIMPLE_crypto_sign_keypair(pk, sk);
}
};
class SphincsSHAKE256192FRobustPqclean : public SphincsHelperPqclean {
public:
SphincsSHAKE256192FRobustPqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSSHAKE256192FROBUST_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSSHAKE256192FROBUST_CRYPTO_BYTES) {}
~SphincsSHAKE256192FRobustPqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHAKE256192FROBUST_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSSHAKE256192FROBUST_crypto_sign_verify(
sig, siglen, m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHAKE256192FROBUST_crypto_sign_keypair(pk, sk);
}
};
class SphincsSHAKE256192SRobustPqclean : public SphincsHelperPqclean {
public:
SphincsSHAKE256192SRobustPqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSSHAKE256192SROBUST_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSSHAKE256192SROBUST_CRYPTO_BYTES) {}
~SphincsSHAKE256192SRobustPqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHAKE256192SROBUST_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSSHAKE256192SROBUST_crypto_sign_verify(
sig, siglen, m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHAKE256192SROBUST_crypto_sign_keypair(pk, sk);
}
};
class SphincsSHAKE256192FSimplePqclean : public SphincsHelperPqclean {
public:
SphincsSHAKE256192FSimplePqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSSHAKE256192FSIMPLE_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSSHAKE256192FSIMPLE_CRYPTO_BYTES) {}
~SphincsSHAKE256192FSimplePqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHAKE256192FSIMPLE_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSSHAKE256192FSIMPLE_crypto_sign_verify(
sig, siglen, m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHAKE256192FSIMPLE_crypto_sign_keypair(pk, sk);
}
};
class SphincsSHAKE256192SSimplePqclean : public SphincsHelperPqclean {
public:
SphincsSHAKE256192SSimplePqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSSHAKE256192SSIMPLE_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSSHAKE256192SSIMPLE_CRYPTO_BYTES) {}
~SphincsSHAKE256192SSimplePqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHAKE256192SSIMPLE_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSSHAKE256192SSIMPLE_crypto_sign_verify(
sig, siglen, m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHAKE256192SSIMPLE_crypto_sign_keypair(pk, sk);
}
};
class SphincsSHAKE256256FRobustPqclean : public SphincsHelperPqclean {
public:
SphincsSHAKE256256FRobustPqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSSHAKE256256FROBUST_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSSHAKE256256FROBUST_CRYPTO_BYTES) {}
~SphincsSHAKE256256FRobustPqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHAKE256256FROBUST_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSSHAKE256256FROBUST_crypto_sign_verify(
sig, siglen, m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHAKE256256FROBUST_crypto_sign_keypair(pk, sk);
}
};
class SphincsSHAKE256256SRobustPqclean : public SphincsHelperPqclean {
public:
SphincsSHAKE256256SRobustPqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSSHAKE256256SROBUST_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSSHAKE256256SROBUST_CRYPTO_BYTES) {}
~SphincsSHAKE256256SRobustPqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHAKE256256SROBUST_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSSHAKE256256SROBUST_crypto_sign_verify(
sig, siglen, m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHAKE256256SROBUST_crypto_sign_keypair(pk, sk);
}
};
class SphincsSHAKE256256FSimplePqclean : public SphincsHelperPqclean {
public:
SphincsSHAKE256256FSimplePqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSSHAKE256256FSIMPLE_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSSHAKE256256FSIMPLE_CRYPTO_BYTES) {}
~SphincsSHAKE256256FSimplePqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHAKE256256FSIMPLE_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSSHAKE256256FSIMPLE_crypto_sign_verify(
sig, siglen, m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHAKE256256FSIMPLE_crypto_sign_keypair(pk, sk);
}
};
class SphincsSHAKE256256SSimplePqclean : public SphincsHelperPqclean {
public:
SphincsSHAKE256256SSimplePqclean()
: SphincsHelperPqclean(
PQCLEAN_SPHINCSSHAKE256256SSIMPLE_CRYPTO_PUBLICKEYBYTES,
PQCLEAN_SPHINCSSHAKE256256SSIMPLE_CRYPTO_BYTES) {}
~SphincsSHAKE256256SSimplePqclean() override = default;
int Sign(uint8_t *sig, size_t *siglen, const uint8_t *m, size_t mlen,
const uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHAKE256256SSIMPLE_crypto_sign_signature(
sig, siglen, m, mlen, sk);
}
int Verify(const uint8_t *sig, size_t siglen, const uint8_t *m, size_t mlen,
const uint8_t *pk) const override {
return PQCLEAN_SPHINCSSHAKE256256SSIMPLE_crypto_sign_verify(
sig, siglen, m, mlen, pk);
}
int Keygen(uint8_t *pk, uint8_t *sk) const override {
return PQCLEAN_SPHINCSSHAKE256256SSIMPLE_crypto_sign_keypair(pk, sk);
}
};
std::vector<std::unique_ptr<SphincsHelperPqclean>>
GetSphincsPqcleanHelperArray() {
std::vector<std::unique_ptr<SphincsHelperPqclean>> sphincs_helper_pqclean;
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsHaraka128FRobustPqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsHaraka128SRobustPqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsHaraka128FSimplePqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsHaraka128SSimplePqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsHaraka192FRobustPqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsHaraka192SRobustPqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsHaraka192FSimplePqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsHaraka192SSimplePqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsHaraka256FRobustPqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsHaraka256SRobustPqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsHaraka256FSimplePqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsHaraka256SSimplePqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsSHA256128FRobustPqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsSHA256128SRobustPqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsSHA256128FSimplePqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsSHA256128SSimplePqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsSHA256192FRobustPqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsSHA256192SRobustPqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsSHA256192FSimplePqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsSHA256192SSimplePqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsSHA256256FRobustPqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsSHA256256SRobustPqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsSHA256256FSimplePqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsSHA256256SSimplePqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsSHAKE256128FRobustPqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsSHAKE256128SRobustPqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsSHAKE256128FSimplePqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsSHAKE256128SSimplePqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsSHAKE256192FRobustPqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsSHAKE256192SRobustPqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsSHAKE256192FSimplePqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsSHAKE256192SSimplePqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsSHAKE256256FRobustPqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsSHAKE256256SRobustPqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsSHAKE256256FSimplePqclean>());
sphincs_helper_pqclean.push_back(
absl::make_unique<SphincsSHAKE256256SSimplePqclean>());
return sphincs_helper_pqclean;
}
const SphincsHelperPqclean &GetSphincsHelperPqclean(int hash_type, int variant,
int key_size,
int signature_length) {
static std::vector<std::unique_ptr<SphincsHelperPqclean>>
*sphincs_helper_pqclean = new std::vector(GetSphincsPqcleanHelperArray());
// Note that we have to adjust the enum values for hash_type, variant and
// signature_length to start at 0. In the proto the 0 entry is for UNSPECIFIED
// values, but here we require the valid enum values to start at index 0.
return *sphincs_helper_pqclean->at(
(hash_type - 1) * NUM_VARIANTS * NUM_KEY_SIZES * NUM_SIG_LENGTHS +
key_size * NUM_VARIANTS * NUM_SIG_LENGTHS +
(variant - 1) * NUM_SIG_LENGTHS + (signature_length - 1));
}
} // namespace subtle
} // namespace tink
} // namespace crypto