Hi all,
I am trying to use OpenSSL libraries (libssl-dev 1.0.2 or 1.1.1) to encode integers into DER format.I am using ASN1_generate_nconf but it seems that this function incorrectly encodes integers. It should encode in two's complement format and should prepend 0x00 byte if the first byte of encoded integer is greater then 0x80. But it is not doing that.Here is my simple program where I check the length of encoded integer. For example for int = 128 the length should be 2. But the length is 2 beginning from int = 256.
#include <stdio.h>
#include <stdint.h>
#include <openssl/asn1.h>
uint64_t i;
char str[100];
ASN1_TYPE *asn_ptr = NULL;
int main () {
for(i = 120; i < 270; i++) {
sprintf(str,"INTEGER:%lu",i);
asn_ptr = ASN1_generate_nconf(str, NULL);
printf("i: %lu, str: %s , len: %d \n", i, str, asn_ptr->value.integer->length);
}
}
i: 120, str: INTEGER:120 , len: 1
i: 121, str: INTEGER:121 , len: 1
i: 122, str: INTEGER:122 , len: 1
i: 123, str: INTEGER:123 , len: 1
i: 124, str: INTEGER:124 , len: 1
i: 125, str: INTEGER:125 , len: 1
i: 126, str: INTEGER:126 , len: 1
i: 127, str: INTEGER:127 , len: 1
i: 128, str: INTEGER:128 , len: 1
i: 129, str: INTEGER:129 , len: 1
i: 130, str: INTEGER:130 , len: 1
i: 131, str: INTEGER:131 , len: 1
i: 132, str: INTEGER:132 , len: 1
i: 133, str: INTEGER:133 , len: 1
i: 134, str: INTEGER:134 , len: 1
i: 135, str: INTEGER:135 , len: 1
i: 136, str: INTEGER:136 , len: 1
i: 137, str: INTEGER:137 , len: 1
i: 138, str: INTEGER:138 , len: 1
i: 139, str: INTEGER:139 , len: 1
i: 140, str: INTEGER:140 , len: 1
i: 141, str: INTEGER:141 , len: 1
i: 142, str: INTEGER:142 , len: 1
i: 143, str: INTEGER:143 , len: 1
i: 144, str: INTEGER:144 , len: 1
i: 145, str: INTEGER:145 , len: 1
i: 146, str: INTEGER:146 , len: 1
i: 147, str: INTEGER:147 , len: 1
i: 148, str: INTEGER:148 , len: 1
i: 149, str: INTEGER:149 , len: 1
i: 150, str: INTEGER:150 , len: 1
i: 151, str: INTEGER:151 , len: 1
i: 152, str: INTEGER:152 , len: 1
i: 153, str: INTEGER:153 , len: 1
i: 154, str: INTEGER:154 , len: 1
i: 155, str: INTEGER:155 , len: 1
i: 156, str: INTEGER:156 , len: 1
i: 157, str: INTEGER:157 , len: 1
i: 158, str: INTEGER:158 , len: 1
i: 159, str: INTEGER:159 , len: 1
i: 160, str: INTEGER:160 , len: 1
i: 161, str: INTEGER:161 , len: 1
i: 162, str: INTEGER:162 , len: 1
i: 163, str: INTEGER:163 , len: 1
i: 164, str: INTEGER:164 , len: 1
i: 165, str: INTEGER:165 , len: 1
i: 166, str: INTEGER:166 , len: 1
i: 167, str: INTEGER:167 , len: 1
i: 168, str: INTEGER:168 , len: 1
i: 169, str: INTEGER:169 , len: 1
i: 170, str: INTEGER:170 , len: 1
i: 171, str: INTEGER:171 , len: 1
i: 172, str: INTEGER:172 , len: 1
i: 173, str: INTEGER:173 , len: 1
i: 174, str: INTEGER:174 , len: 1
i: 175, str: INTEGER:175 , len: 1
i: 176, str: INTEGER:176 , len: 1
i: 177, str: INTEGER:177 , len: 1
i: 178, str: INTEGER:178 , len: 1
i: 179, str: INTEGER:179 , len: 1
i: 180, str: INTEGER:180 , len: 1
i: 181, str: INTEGER:181 , len: 1
i: 182, str: INTEGER:182 , len: 1
i: 183, str: INTEGER:183 , len: 1
i: 184, str: INTEGER:184 , len: 1
i: 185, str: INTEGER:185 , len: 1
i: 186, str: INTEGER:186 , len: 1
i: 187, str: INTEGER:187 , len: 1
i: 188, str: INTEGER:188 , len: 1
i: 189, str: INTEGER:189 , len: 1
i: 190, str: INTEGER:190 , len: 1
i: 191, str: INTEGER:191 , len: 1
i: 192, str: INTEGER:192 , len: 1
i: 193, str: INTEGER:193 , len: 1
i: 194, str: INTEGER:194 , len: 1
i: 195, str: INTEGER:195 , len: 1
i: 196, str: INTEGER:196 , len: 1
i: 197, str: INTEGER:197 , len: 1
i: 198, str: INTEGER:198 , len: 1
i: 199, str: INTEGER:199 , len: 1
i: 200, str: INTEGER:200 , len: 1
i: 201, str: INTEGER:201 , len: 1
i: 202, str: INTEGER:202 , len: 1
i: 203, str: INTEGER:203 , len: 1
i: 204, str: INTEGER:204 , len: 1
i: 205, str: INTEGER:205 , len: 1
i: 206, str: INTEGER:206 , len: 1
i: 207, str: INTEGER:207 , len: 1
i: 208, str: INTEGER:208 , len: 1
i: 209, str: INTEGER:209 , len: 1
i: 210, str: INTEGER:210 , len: 1
i: 211, str: INTEGER:211 , len: 1
i: 212, str: INTEGER:212 , len: 1
i: 213, str: INTEGER:213 , len: 1
i: 214, str: INTEGER:214 , len: 1
i: 215, str: INTEGER:215 , len: 1
i: 216, str: INTEGER:216 , len: 1
i: 217, str: INTEGER:217 , len: 1
i: 218, str: INTEGER:218 , len: 1
i: 219, str: INTEGER:219 , len: 1
i: 220, str: INTEGER:220 , len: 1
i: 221, str: INTEGER:221 , len: 1
i: 222, str: INTEGER:222 , len: 1
i: 223, str: INTEGER:223 , len: 1
i: 224, str: INTEGER:224 , len: 1
i: 225, str: INTEGER:225 , len: 1
i: 226, str: INTEGER:226 , len: 1
i: 227, str: INTEGER:227 , len: 1
i: 228, str: INTEGER:228 , len: 1
i: 229, str: INTEGER:229 , len: 1
i: 230, str: INTEGER:230 , len: 1
i: 231, str: INTEGER:231 , len: 1
i: 232, str: INTEGER:232 , len: 1
i: 233, str: INTEGER:233 , len: 1
i: 234, str: INTEGER:234 , len: 1
i: 235, str: INTEGER:235 , len: 1
i: 236, str: INTEGER:236 , len: 1
i: 237, str: INTEGER:237 , len: 1
i: 238, str: INTEGER:238 , len: 1
i: 239, str: INTEGER:239 , len: 1
i: 240, str: INTEGER:240 , len: 1
i: 241, str: INTEGER:241 , len: 1
i: 242, str: INTEGER:242 , len: 1
i: 243, str: INTEGER:243 , len: 1
i: 244, str: INTEGER:244 , len: 1
i: 245, str: INTEGER:245 , len: 1
i: 246, str: INTEGER:246 , len: 1
i: 247, str: INTEGER:247 , len: 1
i: 248, str: INTEGER:248 , len: 1
i: 249, str: INTEGER:249 , len: 1
i: 250, str: INTEGER:250 , len: 1
i: 251, str: INTEGER:251 , len: 1
i: 252, str: INTEGER:252 , len: 1
i: 253, str: INTEGER:253 , len: 1
i: 254, str: INTEGER:254 , len: 1
i: 255, str: INTEGER:255 , len: 1
i: 256, str: INTEGER:256 , len: 2
i: 257, str: INTEGER:257 , len: 2
i: 258, str: INTEGER:258 , len: 2
i: 259, str: INTEGER:259 , len: 2
i: 260, str: INTEGER:260 , len: 2
i: 261, str: INTEGER:261 , len: 2
i: 262, str: INTEGER:262 , len: 2
i: 263, str: INTEGER:263 , len: 2
i: 264, str: INTEGER:264 , len: 2
i: 265, str: INTEGER:265 , len: 2
i: 266, str: INTEGER:266 , len: 2
i: 267, str: INTEGER:267 , len: 2
i: 268, str: INTEGER:268 , len: 2
i: 269, str: INTEGER:269 , len: 2
Am I using correct function or should I use different one?
#include <stdio.h>
#include <stdint.h>
#include <openssl/asn1.h>
uint64_t i;
char str[100];
ASN1_TYPE *asn_ptr = NULL;
int main () {
for(i = 120; i < 270; i++) {
sprintf(str,"INTEGER:%lu",i);
asn_ptr = ASN1_generate_nconf(str, NULL);
printf("i: %lu, str: %s , len: %d \n", i, str, asn_ptr->value.integer->length);
}
}
i: 120, str: INTEGER:120 , len: 1
i: 121, str: INTEGER:121 , len: 1
i: 122, str: INTEGER:122 , len: 1
i: 123, str: INTEGER:123 , len: 1
i: 124, str: INTEGER:124 , len: 1
i: 125, str: INTEGER:125 , len: 1
i: 126, str: INTEGER:126 , len: 1
i: 127, str: INTEGER:127 , len: 1
i: 128, str: INTEGER:128 , len: 1
i: 129, str: INTEGER:129 , len: 1
i: 130, str: INTEGER:130 , len: 1
i: 131, str: INTEGER:131 , len: 1
i: 132, str: INTEGER:132 , len: 1
i: 133, str: INTEGER:133 , len: 1
i: 134, str: INTEGER:134 , len: 1
i: 135, str: INTEGER:135 , len: 1
i: 136, str: INTEGER:136 , len: 1
i: 137, str: INTEGER:137 , len: 1
i: 138, str: INTEGER:138 , len: 1
i: 139, str: INTEGER:139 , len: 1
i: 140, str: INTEGER:140 , len: 1
i: 141, str: INTEGER:141 , len: 1
i: 142, str: INTEGER:142 , len: 1
i: 143, str: INTEGER:143 , len: 1
i: 144, str: INTEGER:144 , len: 1
i: 145, str: INTEGER:145 , len: 1
i: 146, str: INTEGER:146 , len: 1
i: 147, str: INTEGER:147 , len: 1
i: 148, str: INTEGER:148 , len: 1
i: 149, str: INTEGER:149 , len: 1
i: 150, str: INTEGER:150 , len: 1
i: 151, str: INTEGER:151 , len: 1
i: 152, str: INTEGER:152 , len: 1
i: 153, str: INTEGER:153 , len: 1
i: 154, str: INTEGER:154 , len: 1
i: 155, str: INTEGER:155 , len: 1
i: 156, str: INTEGER:156 , len: 1
i: 157, str: INTEGER:157 , len: 1
i: 158, str: INTEGER:158 , len: 1
i: 159, str: INTEGER:159 , len: 1
i: 160, str: INTEGER:160 , len: 1
i: 161, str: INTEGER:161 , len: 1
i: 162, str: INTEGER:162 , len: 1
i: 163, str: INTEGER:163 , len: 1
i: 164, str: INTEGER:164 , len: 1
i: 165, str: INTEGER:165 , len: 1
i: 166, str: INTEGER:166 , len: 1
i: 167, str: INTEGER:167 , len: 1
i: 168, str: INTEGER:168 , len: 1
i: 169, str: INTEGER:169 , len: 1
i: 170, str: INTEGER:170 , len: 1
i: 171, str: INTEGER:171 , len: 1
i: 172, str: INTEGER:172 , len: 1
i: 173, str: INTEGER:173 , len: 1
i: 174, str: INTEGER:174 , len: 1
i: 175, str: INTEGER:175 , len: 1
i: 176, str: INTEGER:176 , len: 1
i: 177, str: INTEGER:177 , len: 1
i: 178, str: INTEGER:178 , len: 1
i: 179, str: INTEGER:179 , len: 1
i: 180, str: INTEGER:180 , len: 1
i: 181, str: INTEGER:181 , len: 1
i: 182, str: INTEGER:182 , len: 1
i: 183, str: INTEGER:183 , len: 1
i: 184, str: INTEGER:184 , len: 1
i: 185, str: INTEGER:185 , len: 1
i: 186, str: INTEGER:186 , len: 1
i: 187, str: INTEGER:187 , len: 1
i: 188, str: INTEGER:188 , len: 1
i: 189, str: INTEGER:189 , len: 1
i: 190, str: INTEGER:190 , len: 1
i: 191, str: INTEGER:191 , len: 1
i: 192, str: INTEGER:192 , len: 1
i: 193, str: INTEGER:193 , len: 1
i: 194, str: INTEGER:194 , len: 1
i: 195, str: INTEGER:195 , len: 1
i: 196, str: INTEGER:196 , len: 1
i: 197, str: INTEGER:197 , len: 1
i: 198, str: INTEGER:198 , len: 1
i: 199, str: INTEGER:199 , len: 1
i: 200, str: INTEGER:200 , len: 1
i: 201, str: INTEGER:201 , len: 1
i: 202, str: INTEGER:202 , len: 1
i: 203, str: INTEGER:203 , len: 1
i: 204, str: INTEGER:204 , len: 1
i: 205, str: INTEGER:205 , len: 1
i: 206, str: INTEGER:206 , len: 1
i: 207, str: INTEGER:207 , len: 1
i: 208, str: INTEGER:208 , len: 1
i: 209, str: INTEGER:209 , len: 1
i: 210, str: INTEGER:210 , len: 1
i: 211, str: INTEGER:211 , len: 1
i: 212, str: INTEGER:212 , len: 1
i: 213, str: INTEGER:213 , len: 1
i: 214, str: INTEGER:214 , len: 1
i: 215, str: INTEGER:215 , len: 1
i: 216, str: INTEGER:216 , len: 1
i: 217, str: INTEGER:217 , len: 1
i: 218, str: INTEGER:218 , len: 1
i: 219, str: INTEGER:219 , len: 1
i: 220, str: INTEGER:220 , len: 1
i: 221, str: INTEGER:221 , len: 1
i: 222, str: INTEGER:222 , len: 1
i: 223, str: INTEGER:223 , len: 1
i: 224, str: INTEGER:224 , len: 1
i: 225, str: INTEGER:225 , len: 1
i: 226, str: INTEGER:226 , len: 1
i: 227, str: INTEGER:227 , len: 1
i: 228, str: INTEGER:228 , len: 1
i: 229, str: INTEGER:229 , len: 1
i: 230, str: INTEGER:230 , len: 1
i: 231, str: INTEGER:231 , len: 1
i: 232, str: INTEGER:232 , len: 1
i: 233, str: INTEGER:233 , len: 1
i: 234, str: INTEGER:234 , len: 1
i: 235, str: INTEGER:235 , len: 1
i: 236, str: INTEGER:236 , len: 1
i: 237, str: INTEGER:237 , len: 1
i: 238, str: INTEGER:238 , len: 1
i: 239, str: INTEGER:239 , len: 1
i: 240, str: INTEGER:240 , len: 1
i: 241, str: INTEGER:241 , len: 1
i: 242, str: INTEGER:242 , len: 1
i: 243, str: INTEGER:243 , len: 1
i: 244, str: INTEGER:244 , len: 1
i: 245, str: INTEGER:245 , len: 1
i: 246, str: INTEGER:246 , len: 1
i: 247, str: INTEGER:247 , len: 1
i: 248, str: INTEGER:248 , len: 1
i: 249, str: INTEGER:249 , len: 1
i: 250, str: INTEGER:250 , len: 1
i: 251, str: INTEGER:251 , len: 1
i: 252, str: INTEGER:252 , len: 1
i: 253, str: INTEGER:253 , len: 1
i: 254, str: INTEGER:254 , len: 1
i: 255, str: INTEGER:255 , len: 1
i: 256, str: INTEGER:256 , len: 2
i: 257, str: INTEGER:257 , len: 2
i: 258, str: INTEGER:258 , len: 2
i: 259, str: INTEGER:259 , len: 2
i: 260, str: INTEGER:260 , len: 2
i: 261, str: INTEGER:261 , len: 2
i: 262, str: INTEGER:262 , len: 2
i: 263, str: INTEGER:263 , len: 2
i: 264, str: INTEGER:264 , len: 2
i: 265, str: INTEGER:265 , len: 2
i: 266, str: INTEGER:266 , len: 2
i: 267, str: INTEGER:267 , len: 2
i: 268, str: INTEGER:268 , len: 2
i: 269, str: INTEGER:269 , len: 2
Regards,
Rafał Arciszewski