blob: 0f02e5130d191be96822e7413102c229c9d23ffb [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.
*/
#ifndef _DECAF_SECURITY_KEY_H
#define _DECAF_SECURITY_KEY_H
#include <decaf/util/Config.h>
#include <vector>
#include <string>
namespace decaf {
namespace security {
/**
* The Key interface is the top-level interface for all keys. It defines the
* functionality shared by all key objects. All keys have three
* characteristics:<br>
* <br>
* An Algorithm <br>
* This is the key algorithm for that key. The key algorithm is usually an
* encryption or asymmetric operation algorithm (such as DSA or RSA), which
* will work with those algorithms and with related algorithms (such as MD5
* with RSA, SHA-1 with RSA, Raw DSA, etc.) The name of the algorithm of a
* key is obtained using the getAlgorithm method.<br>
* <br>
* An Encoded Form <br>
* This is an external encoded form for the key used when a standard
* representation of the key is needed outside the application, as
* when transmitting the key to some other party. The key is encoded
* according to a standard format (such as X.509 SubjectPublicKeyInfo or
* PKCS#8), and is returned using the getEncoded method. Note: The syntax of
* the ASN.1 type SubjectPublicKeyInfo is defined as follows:
* <br>
* SubjectPublicKeyInfo ::= SEQUENCE { <br>
* algorithm AlgorithmIdentifier, <br>
* subjectPublicKey BIT STRING } <br>
* <br>
* AlgorithmIdentifier ::= SEQUENCE { <br>
* algorithm OBJECT IDENTIFIER, <br>
* parameters ANY DEFINED BY algorithm OPTIONAL } <br>
* <br>
* For more information, see RFC 2459: Internet X.509 Public Key
* Infrastructure Certificate and CRL Profile. <br>
* <br>
* A Format <br>
* This is the name of the format of the encoded key. It is returned by the
* getFormat method.
*/
class DECAF_API Key {
public:
virtual ~Key();
/**
* Returns the standard algorithm name for this key. For example, "DSA"
* would indicate that this key is a DSA key.
*
* @return the name of the algorithm associated with this key.
*/
virtual std::string getAlgorithm() const = 0;
/**
* Provides the key in its primary encoding format, or nothing if this
* key does not support encoding.
*
* @param output
* Receives the encoded key, or nothing if the key does not support
* encoding.
*/
virtual void getEncoded(std::vector<unsigned char>& output) const = 0;
/**
* Returns the name of the primary encoding format of this key, or
* an empty string if this key does not support encoding. The primary
* encoding format is named in terms of the appropriate ASN.1 data
* format, if an ASN.1 specification for this key exists. For example,
* the name of the ASN.1 data format for public keys is
* SubjectPublicKeyInfo, as defined by the X.509 standard; in this
* case, the returned format is "X.509". Similarly, the name of the
* ASN.1 data format for private keys is PrivateKeyInfo, as defined by
* the PKCS #8 standard; in this case, the returned format is "PKCS#8".
*
* @return the primary encoding format of the key.
*/
virtual std::string getFormat() const = 0;
};
}}
#endif /*_DECAF_SECURITY_KEY_H*/