Newer
Older
/**
* @author ETSI / STF481
* @version $URL$
* $Id$
* @desc Module containing functions for Security Protocol
*
*/
module LibItsSecurity_Functions {
// import from LibCommon_BasicTypesAndValues all;
// import from LibCommon_DataStrings all;
// import from LibCommon_VerdictControl {type FncRetCode;}
// import from LibCommon_Sync all;
// import from LibCommon_Time all;
// LibIts
// import from LibItsCommon_Functions all;
// import from LibItsCommon_TestSystem all;
// import from LibItsCommon_TypesAndValues all;
import from LibItsGeoNetworking_TypesAndValues all;
import from LibItsSecurity_TypesAndValues all;
// import from LibItsGeoNetworking_TestSystem all;
// import from LibItsGeoNetworking_Templates all;
// import from LibItsGeoNetworking_Functions all;
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/**
* @desc Produces a 256-bit (32-byte) hash value
* @param TODO
* @return TODO
*/
function f_hashWithSha256(in octetstring p_toBeHashedData) {
}
/**
* @desc Produces a Elliptic Curve Digital Signature Algorithm (ECDSA) signaturee
* @param TODO
* @return TODO
*/
function f_signWithEcdsaNistp256WithSha256() {
}
/**
* @desc Verify the signature of the specified data
* @param TODO
* @return true on success, false otherwise
*/
function f_verifyWithEcdsaNistp256WithSha256() return boolean {
return false;
}
/**
* @desc Produce a new public/private key pair based on Elliptic Curve Digital Signature Algorithm (ECDSA) algorithm
* @param TODO
* @return true on success, false otherwise
*/
function f_generateKeyPair() return boolean {
return false;
}
/**
* @desc Calculate digest over the certificate
* @param cert The certificate
* @return the digest
*/
function f_calculateDigest(in Certificate cert) return HashedId8 {
}
group gettersAndSetters {
/**
* @desc return SecuredMessage field of GeoNetworking packet
* @param p_msg GeoNetworking packet
* @return the SecuredMessage if any
*/
function f_getSecuredMessage(in GeoNetworkingPdu p_msg)
return SecuredMessage {
return p_msg.gnPacket.securedMsg;
}
/**
* @desc return SecuredMessage header field of given type or null if none
* @param p_msg the SecuredMessage
* @param p_type header field type
* @return HeaderField of given type if any or null
*/
function f_getMsgHeaderField(in SecuredMessage p_msg, in HeaderFieldType p_type)
return HeaderField {
var HeaderField v_return := null;
var integer v_length := lengthof(p_msg.header_fields);
var integer v_i;
for(v_i := 0; v_i < v_length; v_i := v_i + 1){
if(p_msg.header_fields[v_i].type_ == p_type){
v_return := p_msg.header_fields[v_i];
break;
}
}
return v_return;
}
/**
* @desc return SignerInfo SecuredMessage field
*/
function f_getMsgSignerInfo(in SecuredMessage p_msg) return SignerInfo {
var HeaderField v_hf := f_getMsgHeaderField(p_msg, e_signer_info);
return v_hf.headerField.signer;
}
return null;
}
}// End of group gettersAndSetters
} // End of group helpersFunctions
group externalFunctions {
/**
* @desc Produces a 256-bit (32-byte) hash value
* @param p_toBeHashedData Data to be used to calculate the hash value
* @return The hash value
*/
external function fx_hashWithSha256(in octetstring p_toBeHashedData) return octetstring;
/**
* @desc Produces a Elliptic Curve Digital Signature Algorithm (ECDSA) signaturee
* @param p_toBeSignedData The data to be signed
* @param p_privateKey The private key
* @return The signature value
*/
external function fx_signWithEcdsaNistp256WithSha256(in octetstring p_toBeSignedData, in octetstring/*UInt64*/ p_privateKey) return octetstring;
/**
* @desc Verify the signature of the specified data
* @param p_toBeVerifiedData The data to be verified
* @param p_signature The signature
* @param p_ecdsaNistp256PublicKeyX The public key (x coordinate)
* @param p_ecdsaNistp256PublicKeyY The public key (y coordinate)
* @return true on success, false otherwise
*/
external function fx_verifyWithEcdsaNistp256WithSha256(in octetstring p_toBeVerifiedData, in octetstring p_signature, in octetstring p_ecdsaNistp256PublicKeyX, in octetstring p_ecdsaNistp256PublicKeyY) return boolean;
/**
* @desc Produce a new public/private key pair based on Elliptic Curve Digital Signature Algorithm (ECDSA) algorithm
* @param p_privateKey The new private key value
* @param p_publicKeyX The new public key value (x coordinate)
* @param p_publicKeyX The new public key value (y coordinate)
* @return true on success, false otherwise
*/
external function fx_generateKeyPair(out octetstring/*UInt64*/ p_privateKey, out octetstring p_publicKeyX, out octetstring p_publicKeyY) return boolean;
} // End of group externalFunctions