// CkEdDSA.h: interface for the CkEdDSA class.
//
//////////////////////////////////////////////////////////////////////

// This header is generated for Chilkat 11.3.0

#define _CkVersion 11.3.0

#ifndef _CkEdDSA_H
#define _CkEdDSA_H
	
#include "chilkatDefs.h"
#include "CkString.h"
#include "CkMultiByteBase.h"

class CkPrng;
class CkPrivateKey;
class CkPublicKey;
class CkBinData;



#if !defined(__sun__) && !defined(__sun)
#pragma pack (push, 8)
#endif


#undef Copy

// CLASS: CkEdDSA
class CK_VISIBLE_PUBLIC CkEdDSA  : public CkMultiByteBase
{
    private:

	// Don't allow assignment or copying these objects.
	CkEdDSA(const CkEdDSA &);
	CkEdDSA &operator=(const CkEdDSA &);

    public:
	CkEdDSA(void);
	virtual ~CkEdDSA(void);

	static CkEdDSA *createNew(void);
	static CkEdDSA *createNew2(int progLang);
	void CK_VISIBLE_PRIVATE inject(void *impl);

	// May be called when finished with the object to free/dispose of any
	// internal resources held by the object. 
	void dispose(void);

	
		
	

	// BEGIN PUBLIC INTERFACE

	// ----------------------
	// Properties
	// ----------------------
	// Can be Ed25519 , Ed25519ph , or Ed25519ctx . The default is Ed25519 . This
	// property was introduced in v9.5.0.91. Prior to this version, Ed25519 was the
	// only EdDSA instance supported.
	void get_Algorithm(CkString &str);
	// Can be Ed25519 , Ed25519ph , or Ed25519ctx . The default is Ed25519 . This
	// property was introduced in v9.5.0.91. Prior to this version, Ed25519 was the
	// only EdDSA instance supported.
	const char *algorithm(void);
	// Can be Ed25519 , Ed25519ph , or Ed25519ctx . The default is Ed25519 . This
	// property was introduced in v9.5.0.91. Prior to this version, Ed25519 was the
	// only EdDSA instance supported.
	void put_Algorithm(const char *newVal);

	// The context bytes (in hex string format) to be used for Ed25519ctx or Ed25519ph.
	void get_Context(CkString &str);
	// The context bytes (in hex string format) to be used for Ed25519ctx or Ed25519ph.
	const char *context(void);
	// The context bytes (in hex string format) to be used for Ed25519ctx or Ed25519ph.
	void put_Context(const char *newVal);



	// ----------------------
	// Methods
	// ----------------------
	// Generates an Ed25519 key. privKey is an output argument. The generated key is
	// created in privKey.
	bool GenEd25519Key(CkPrng &prng, CkPrivateKey &privKey);


	// Computes a shared secret given a private and public key. For example, Alice and
	// Bob can compute the identical shared secret by doing the following: Alice sends
	// Bob her public key, and Bob calls SharedSecretENC with his private key and
	// Alice's public key. Bob sends Alice his public key, and Alice calls
	// SharedSecretENC with her private key and Bob's public key. Both calls to
	// SharedSecretENC will produce the same result. The resulting bytes are returned
	// in encoded string form (hex, base64, etc) as specified by encoding.
	bool SharedSecretENC(CkPrivateKey &privkey, CkPublicKey &pubkey, const char *encoding, CkString &outStr);

	// Computes a shared secret given a private and public key. For example, Alice and
	// Bob can compute the identical shared secret by doing the following: Alice sends
	// Bob her public key, and Bob calls SharedSecretENC with his private key and
	// Alice's public key. Bob sends Alice his public key, and Alice calls
	// SharedSecretENC with her private key and Bob's public key. Both calls to
	// SharedSecretENC will produce the same result. The resulting bytes are returned
	// in encoded string form (hex, base64, etc) as specified by encoding.
	const char *sharedSecretENC(CkPrivateKey &privkey, CkPublicKey &pubkey, const char *encoding);

	// Signs the contents of bd and returns the signature according to encoding. The
	// encoding can be any encoding supported by Chilkat, such as hex , base64 , etc.
	bool SignBdENC(CkBinData &bd, const char *encoding, CkPrivateKey &privkey, CkString &outStr);

	// Signs the contents of bd and returns the signature according to encoding. The
	// encoding can be any encoding supported by Chilkat, such as hex , base64 , etc.
	const char *signBdENC(CkBinData &bd, const char *encoding, CkPrivateKey &privkey);

	// Verifies the signature against the contents of bd. The encodedSig is passed as an
	// encoded string (such as hex, base64, etc.) using the encoding specified by enocding.
	// The pubkey contains the Ed25519 public key used to verify.
	bool VerifyBdENC(CkBinData &bd, const char *encodedSig, const char *enocding, CkPublicKey &pubkey);






	// END PUBLIC INTERFACE


};
#if !defined(__sun__) && !defined(__sun)
#pragma pack (pop)
#endif
	
#endif
