Re-assign algorithm identifiers
diff --git a/dumper/dumper.c b/dumper/dumper.c
index 024f718..6128856 100644
--- a/dumper/dumper.c
+++ b/dumper/dumper.c
@@ -39,43 +39,52 @@
 #define CBOR_CONTEXT_PARAM
 #endif
 
-FOO AlgorithmMap[36] = {
-	{ "ES512", CN_CBOR_INT, -9, NULL, 0, 0 },
-	{ "ES384", CN_CBOR_INT, -8, NULL, 0, 0 },
-	{"ES256", CN_CBOR_INT, -7, NULL, 0, 0 },
+FOO AlgorithmMap[37] = {
+	{ "ECHD-SS+A256KW", CN_CBOR_INT, -34, NULL, 0, 0 },
+	{ "ECHD-SS+A192KW", CN_CBOR_INT, -33, NULL, 0, 0 },
+	{ "ECHD-SS+A128KW", CN_CBOR_INT, -32, NULL, 0, 0 },
+	{ "ECHD-ES+A256KW", CN_CBOR_INT, -31, NULL, 0, 0 },
+	{ "ECHD-ES+A192KW", CN_CBOR_INT, -30, NULL, 0, 0 },
+	{ "ECHD-ES+A128KW", CN_CBOR_INT, -29, NULL, 0, 0 },
+	{ "ECDH-SS + HKDF-512", CN_CBOR_INT, -28, NULL, 0, 0 },
+	{ "ECDH-SS + HKDF-256", CN_CBOR_INT, -27, NULL, 0, 0 },
+	{ "ECDH-ES + HKDF-512", CN_CBOR_INT, -26, NULL, 0, 0 },
+	{ "ECDH-ES + HKDF-256", CN_CBOR_INT, -25, NULL, 0, 0 },
+
+	{ "ECDSA 512", CN_CBOR_INT, -9, NULL, 0, 0 },
+	{ "ECDSA 384", CN_CBOR_INT, -8, NULL, 0, 0 },
+	{"ECDSA 256", CN_CBOR_INT, -7, NULL, 0, 0 },
+
 	{"direct", CN_CBOR_INT, -6, NULL, 0, 0 },
+
 	{"A256KW", CN_CBOR_INT, -5, NULL, 0, 0 },
 	{"A192KW", CN_CBOR_INT, -4, NULL, 0, 0 },
 	{"A128KW", CN_CBOR_INT, -3, NULL, 0, 0 },
+
 	{"AES-GCM 128", CN_CBOR_UINT, 1, NULL, 0, 0 },
 	{"AES-GCM 192", CN_CBOR_UINT, 2, NULL, 0, 0 },
 	{"AES-GCM 256", CN_CBOR_UINT, 3, NULL, 0, 0 },
-	{"HMAC 256//256", CN_CBOR_UINT, 4, NULL, 0, 0 },
-	{"HMAC 384//384", CN_CBOR_UINT, 5, NULL, 0, 0 },
-	{"HMAC 512//512", CN_CBOR_UINT, 6, NULL, 0, 0 },
+
+	{"HMAC 256//64", CN_CBOR_UINT, 4, NULL, 0, 0},
+	{"HMAC 256//256", CN_CBOR_UINT, 5, NULL, 0, 0 },
+	{"HMAC 384//384", CN_CBOR_UINT, 6, NULL, 0, 0 },
+	{"HMAC 512//512", CN_CBOR_UINT, 8, NULL, 0, 0 },
+
 	{"AES-CCM-16-64-128", CN_CBOR_UINT, 10, NULL, 0, 0 },
 	{"AES-CCM-16-64-256", CN_CBOR_UINT, 11, NULL, 0, 0 },
 	{"AES-CCM-16-128-128", CN_CBOR_UINT, 12, NULL, 0, 0 },
 	{"AES-CCM-16-128-256", CN_CBOR_UINT, 13, NULL, 0, 0 },
 	{"AES-CBC-MAC-128//64", CN_CBOR_UINT, 14, NULL, 0, 0},
 	{"AES-CBC-MAC-256//64", CN_CBOR_UINT, 15, NULL, 0, 0},
+
 	{"ChaCha20//Poly1305", CN_CBOR_UINT, 24, NULL, 0, 0 },
+
 	{"AES-CBC-MAC-128/128", CN_CBOR_UINT, 25, NULL, 0, 0},
 	{"AES-CBC-MAC-256/128", CN_CBOR_UINT, 26, NULL, 0, 0},
 	{"AES-CCM-64-64-128", CN_CBOR_UINT, 30, NULL, 0, 0 },
 	{"AES-CCM-64-64-256", CN_CBOR_UINT, 31, NULL, 0, 0 },
 	{"AES-CCM-64-128-128", CN_CBOR_UINT, 32, NULL, 0, 0 },
 	{"AES-CCM-64-128-256", CN_CBOR_UINT, 33, NULL, 0, 0 },
-	{"ECDH-ES + HKDF-256", CN_CBOR_UINT, 50, NULL, 0, 0 },
-	{"ECDH-ES + HKDF-512", CN_CBOR_UINT, 51, NULL, 0, 0 },
-	{"ECDH-SS + HKDF-256", CN_CBOR_UINT, 52, NULL, 0, 0 },
-	{"ECDH-SS + HKDF-512", CN_CBOR_UINT, 53, NULL, 0, 0 },
-	{"ECHD-ES+A128KW", CN_CBOR_UINT, 54, NULL, 0, 0 },
-	{ "ECHD-ES+A192KW", CN_CBOR_UINT, 55, NULL, 0, 0 },
-	{ "ECHD-ES+A256KW", CN_CBOR_UINT, 56, NULL, 0, 0 },
-	{ "ECHD-SS+A128KW", CN_CBOR_UINT, 57, NULL, 0, 0 },
-	{ "ECHD-SS+A192KW", CN_CBOR_UINT, 58, NULL, 0, 0 },
-	{ "ECHD-SS+A256KW", CN_CBOR_UINT, 59, NULL, 0, 0 },
 };
 
 FOO KeyMap[9] = {
@@ -168,12 +177,22 @@
 	{ "signatures", CN_CBOR_ARRAY, 0, &Signers, 1, 0 }
 };
 
+FOO Sign0Body[4] = {
+	{ "protected", CN_CBOR_BYTES, 0, &RecurseHeaderMap, 1, 0 },
+	{ "unprotected", CN_CBOR_MAP, 0, HeaderMap, _countof(HeaderMap), 0 },
+	{ "payload", CN_CBOR_BYTES, 0, NULL, 0, 0 }
+};
+
 FOO EnvelopedMessage = {
 	NULL, CN_CBOR_ARRAY, 0, EncryptedBody, _countof(EncryptedBody), 0
 };
 FOO SignedMessage = {
 	NULL, CN_CBOR_ARRAY, 0, SignBody, _countof(SignBody), 0
 };
+FOO Sign0Message = {
+	NULL, CN_CBOR_ARRAY, 0, Sign0Body, _countof(Sign0Body), 0
+};
+
 FOO MacMessage = {
 	NULL, CN_CBOR_ARRAY, 0, MacBody, _countof(MacBody), 0
 };
@@ -194,6 +213,10 @@
 	NULL, CN_CBOR_TAG, 999, &SignedMessage, 1, 0
 };
 
+FOO Sign0MessageWithTag = {
+	NULL, CN_CBOR_TAG, 997, &Sign0Message, 1, 0
+};
+
 FOO MacMessageWithTag = {
 	NULL, CN_CBOR_TAG, 996, &MacMessage, 1, 0
 };
@@ -573,7 +596,8 @@
 			case 992: root = &EnvelopedMessageWithTag; break;
 			case 993: root = &EncryptedMessageWithTag; break;
 			case 994: root = &MacMessageWithTag; break;
-			case 997: root = &Mac0MessageWithTag; break;
+			case 996: root = &Mac0MessageWithTag; break;
+			case 997: root = &Sign0MessageWithTag; break;
 			}
 		}
 	}
diff --git a/src/cose.h b/src/cose.h
index 609c4c6..3d9b0fe 100644
--- a/src/cose.h
+++ b/src/cose.h
@@ -80,10 +80,10 @@
 	COSE_Algorithm_AES_GCM_192 = 2,
 	COSE_Algorithm_AES_GCM_256 = 3,
 
-	COSE_Algorithm_HMAC_256_256 = 4,
-	COSE_Algorithm_HMAC_384_384 = 5,
-	COSE_Algorithm_HMAC_512_512 = 6,
-	COSE_Algorithm_HMAC_256_64 = 7,
+	COSE_Algorithm_HMAC_256_64 = 4,
+	COSE_Algorithm_HMAC_256_256 = 5,
+	COSE_Algorithm_HMAC_384_384 = 6,
+	COSE_Algorithm_HMAC_512_512 = 7,
 
 	COSE_Algorithm_CBC_MAC_128_64 = 14,
 	COSE_Algorithm_CBC_MAC_256_64 = 15,
@@ -99,30 +99,36 @@
 	COSE_Algorithm_AES_CCM_64_128_128 = 32,
 	COSE_Algorithm_AES_CCM_64_128_256 = 33,
 
-	COSE_Algorithm_ECDH_ES_HKDF_256 = 50,
-	COSE_Algorithm_ECDH_ES_HKDF_512 = 51,
-	COSE_Algorithm_ECDH_SS_HKDF_256 = 52,
-	COSE_Algorithm_ECDH_SS_HKDF_512 = 53,
+	COSE_Algorithm_ECDH_ES_HKDF_256 = -25,
+	COSE_Algorithm_ECDH_ES_HKDF_512 = -26,
+	COSE_Algorithm_ECDH_SS_HKDF_256 = -27,
+	COSE_Algorithm_ECDH_SS_HKDF_512 = -28,
 
-	COSE_Algorithm_ECDH_ES_A128KW = 54,
-	COSE_Algorithm_ECDH_ES_A192KW = 55,
-	COSE_Algorithm_ECDH_ES_A256KW = 56,
-	COSE_Algorithm_ECDH_SS_A128KW = 57,
-	COSE_Algorithm_ECDH_SS_A192KW = 58,
-	COSE_Algorithm_ECDH_SS_A256KW = 59,
+	COSE_Algorithm_ECDH_ES_A128KW = -29,
+	COSE_Algorithm_ECDH_ES_A192KW = -30,
+	COSE_Algorithm_ECDH_ES_A256KW = -31,
+	COSE_Algorithm_ECDH_SS_A128KW = -32,
+	COSE_Algorithm_ECDH_SS_A192KW = -33,
+	COSE_Algorithm_ECDH_SS_A256KW = -34,
 
 	COSE_Algorithm_AES_KW_128 = -3,
 	COSE_Algorithm_AES_KW_192 = -4,
 	COSE_Algorithm_AES_KW_256 = -5,
 
 	COSE_Algorithm_Direct = -6,
-	COSE_Algorithm_PS256 = -26,
-	COSE_Algorithm_PS384 = -27,
-	COSE_Algorithm_PS512 = -28,
+
+	COSE_Algorithm_Direct_HKDF_HMAC_SHA_256 = -10,
+	COSE_Algorithm_Direct_HKDF_HMAC_SHA_512 = -11,
+	COSE_Algorithm_Direct_HKDF_AES_128 = -12,
+	COSE_Algorithm_Direct_HKDF_AES_256 = -13,
+
+	COSE_Algorithm_PS256 = -8,
+	COSE_Algorithm_PS384 = -37,
+	COSE_Algorithm_PS512 = -38,
 
 	COSE_Algorithm_ECDSA_SHA_256 = -7,
-	COSE_Algorithm_ECDSA_SHA_384 = -8,
-	COSE_Algorithm_ECDSA_SHA_512 = -9,
+	COSE_Algorithm_ECDSA_SHA_384 = -35,
+	COSE_Algorithm_ECDSA_SHA_512 = -36,
 } COSE_Algorithms;
 
 typedef enum {