>From c31426572f807a700642c639ae7da04b06eedf86 Mon Sep 17 00:00:00 2001
From: Ben Sartor
Date: Wed, 11 Feb 2015 21:34:48 +0100
Subject: [PATCH 3/3] added to_string and from_string for enums: MSZrtpHash,
MSZrtpCipher, MSZrtpAuthTag, MSZrtpKeyAgreement, MSZrtpSasType
---
include/mediastreamer2/zrtp.h | 15 +++++++
src/crypto/zrtp.c | 101 ++++++++++++++++++++++++++++++++++++++++++
2 files changed, 116 insertions(+)
diff --git a/include/mediastreamer2/zrtp.h b/include/mediastreamer2/zrtp.h
index a4652ce..811c30d 100644
--- a/include/mediastreamer2/zrtp.h
+++ b/include/mediastreamer2/zrtp.h
@@ -143,6 +143,21 @@ MS2_PUBLIC void ms_zrtp_sas_verified(MSZrtpContext* ctx);
*/
MS2_PUBLIC void ms_zrtp_sas_reset_verified(MSZrtpContext* ctx);
+/**
+ * from_string and to_string for enums: MSZrtpHash, MSZrtpCipher, MSZrtpAuthTag, MSZrtpKeyAgreement, MSZrtpSasType
+ */
+MS2_PUBLIC MSZrtpHash ms_zrtp_hash_from_string(const char* str);
+MS2_PUBLIC const char* ms_zrtp_hash_to_string(const MSZrtpHash hash);
+MS2_PUBLIC MSZrtpCipher ms_zrtp_cipher_from_string(const char* str);
+MS2_PUBLIC const char* ms_zrtp_cipher_to_string(const MSZrtpCipher cipher);
+MS2_PUBLIC MSZrtpAuthTag ms_zrtp_auth_tag_from_string(const char* str);
+MS2_PUBLIC const char* ms_zrtp_auth_tag_to_string(const MSZrtpAuthTag authTag);
+MS2_PUBLIC MSZrtpKeyAgreement ms_zrtp_key_agreement_from_string(const char* str);
+MS2_PUBLIC const char* ms_zrtp_key_agreement_to_string(const MSZrtpKeyAgreement keyAgreement);
+MS2_PUBLIC MSZrtpSasType ms_zrtp_sas_type_from_string(const char* str);
+MS2_PUBLIC const char* ms_zrtp_sas_type_to_string(const MSZrtpSasType sasType);
+
+
#ifdef __cplusplus
}
#endif
diff --git a/src/crypto/zrtp.c b/src/crypto/zrtp.c
index 6c99fd5..537cdd8 100644
--- a/src/crypto/zrtp.c
+++ b/src/crypto/zrtp.c
@@ -623,6 +623,107 @@ void ms_zrtp_transport_modifier_destroy(RtpTransportModifier *tp) {}
void ms_zrtp_set_stream_sessions(MSZrtpContext *zrtp_context, MSMediaStreamSessions *stream_sessions) {}
#endif
+#define STRING_COMPARE_RETURN(string, value)\
+ if (strcmp(string,#value) == 0) return value
+
+#define CASE_RETURN_STRING(value)\
+ case value: return #value;
+
+#define SWITCH_CRYPTO_ALGO(value, cases)\
+ switch(value) {\
+ cases\
+ }\
+ return "";
+
+MS2_PUBLIC MSZrtpHash ms_zrtp_hash_from_string(const char* str) {
+ STRING_COMPARE_RETURN(str, MS_ZRTP_HASH_S256);
+ STRING_COMPARE_RETURN(str, MS_ZRTP_HASH_S384);
+ STRING_COMPARE_RETURN(str, MS_ZRTP_HASH_N256);
+ STRING_COMPARE_RETURN(str, MS_ZRTP_HASH_N384);
+ return MS_ZRTP_HASH_INVALID;
+}
+MS2_PUBLIC const char* ms_zrtp_hash_to_string(const MSZrtpHash hash) {
+ SWITCH_CRYPTO_ALGO(hash,\
+ CASE_RETURN_STRING(MS_ZRTP_HASH_INVALID);\
+ CASE_RETURN_STRING(MS_ZRTP_HASH_S256);\
+ CASE_RETURN_STRING(MS_ZRTP_HASH_S384);\
+ CASE_RETURN_STRING(MS_ZRTP_HASH_N256);\
+ CASE_RETURN_STRING(MS_ZRTP_HASH_N384);\
+ );
+}
+MS2_PUBLIC MSZrtpCipher ms_zrtp_cipher_from_string(const char* str) {
+ STRING_COMPARE_RETURN(str, MS_ZRTP_CIPHER_AES1);
+ STRING_COMPARE_RETURN(str, MS_ZRTP_CIPHER_AES2);
+ STRING_COMPARE_RETURN(str, MS_ZRTP_CIPHER_AES3);
+ STRING_COMPARE_RETURN(str, MS_ZRTP_CIPHER_2FS1);
+ STRING_COMPARE_RETURN(str, MS_ZRTP_CIPHER_2FS2);
+ STRING_COMPARE_RETURN(str, MS_ZRTP_CIPHER_2FS3);
+ return MS_ZRTP_CIPHER_INVALID;
+}
+
+MS2_PUBLIC const char* ms_zrtp_cipher_to_string(const MSZrtpCipher cipher) {
+ SWITCH_CRYPTO_ALGO(cipher,\
+ CASE_RETURN_STRING(MS_ZRTP_CIPHER_INVALID);\
+ CASE_RETURN_STRING(MS_ZRTP_CIPHER_AES1);\
+ CASE_RETURN_STRING(MS_ZRTP_CIPHER_AES2);\
+ CASE_RETURN_STRING(MS_ZRTP_CIPHER_AES3);\
+ CASE_RETURN_STRING(MS_ZRTP_CIPHER_2FS1);\
+ CASE_RETURN_STRING(MS_ZRTP_CIPHER_2FS2);\
+ CASE_RETURN_STRING(MS_ZRTP_CIPHER_2FS3);\
+ );
+}
+
+MS2_PUBLIC MSZrtpAuthTag ms_zrtp_auth_tag_from_string(const char* str) {
+ STRING_COMPARE_RETURN(str, MS_ZRTP_AUTHTAG_HS32);
+ STRING_COMPARE_RETURN(str, MS_ZRTP_AUTHTAG_HS80);
+ STRING_COMPARE_RETURN(str, MS_ZRTP_AUTHTAG_SK32);
+ STRING_COMPARE_RETURN(str, MS_ZRTP_AUTHTAG_SK64);
+ return MS_ZRTP_AUTHTAG_INVALID;
+}
+
+MS2_PUBLIC const char* ms_zrtp_auth_tag_to_string(const MSZrtpAuthTag authTag) {
+ SWITCH_CRYPTO_ALGO(authTag,\
+ CASE_RETURN_STRING(MS_ZRTP_AUTHTAG_INVALID);\
+ CASE_RETURN_STRING(MS_ZRTP_AUTHTAG_HS32);\
+ CASE_RETURN_STRING(MS_ZRTP_AUTHTAG_HS80);\
+ CASE_RETURN_STRING(MS_ZRTP_AUTHTAG_SK32);\
+ CASE_RETURN_STRING(MS_ZRTP_AUTHTAG_SK64);\
+ );
+}
+
+MSZrtpKeyAgreement ms_zrtp_key_agreement_from_string(const char* str) {
+ STRING_COMPARE_RETURN(str, MS_ZRTP_KEY_AGREEMENT_DH2K);
+ STRING_COMPARE_RETURN(str, MS_ZRTP_KEY_AGREEMENT_DH3K);
+ STRING_COMPARE_RETURN(str, MS_ZRTP_KEY_AGREEMENT_EC25);
+ STRING_COMPARE_RETURN(str, MS_ZRTP_KEY_AGREEMENT_EC38);
+ STRING_COMPARE_RETURN(str, MS_ZRTP_KEY_AGREEMENT_EC52);
+ return MS_ZRTP_KEY_AGREEMENT_INVALID;
+}
+
+const char* ms_zrtp_key_agreement_to_string(const MSZrtpKeyAgreement keyAgreement) {
+ SWITCH_CRYPTO_ALGO(keyAgreement,\
+ CASE_RETURN_STRING(MS_ZRTP_KEY_AGREEMENT_INVALID);\
+ CASE_RETURN_STRING(MS_ZRTP_KEY_AGREEMENT_DH2K);\
+ CASE_RETURN_STRING(MS_ZRTP_KEY_AGREEMENT_DH3K);\
+ CASE_RETURN_STRING(MS_ZRTP_KEY_AGREEMENT_EC25);\
+ CASE_RETURN_STRING(MS_ZRTP_KEY_AGREEMENT_EC38);\
+ CASE_RETURN_STRING(MS_ZRTP_KEY_AGREEMENT_EC52);\
+ );
+}
+
+MS2_PUBLIC MSZrtpSasType ms_zrtp_sas_type_from_string(const char* str) {
+ STRING_COMPARE_RETURN(str, MS_ZRTP_SAS_B32);
+ STRING_COMPARE_RETURN(str, MS_ZRTP_SAS_B256);
+ return MS_ZRTP_SAS_INVALID;
+}
+
+MS2_PUBLIC const char* ms_zrtp_sas_type_to_string(const MSZrtpSasType sasType) {
+ SWITCH_CRYPTO_ALGO(sasType,\
+ CASE_RETURN_STRING(MS_ZRTP_SAS_INVALID);\
+ CASE_RETURN_STRING(MS_ZRTP_SAS_B32);\
+ CASE_RETURN_STRING(MS_ZRTP_SAS_B256);\
+ );
+}
--
2.1.4