p = source->base;
size = source->length;
- for (ac = 0; size > 1; size -= 2, p += 2)
+ if (source->base[3] == DST_ALG_RSAMD5) {
+ return ((p[size - 3] << 8) + p[size - 2]);
+ }
+
+ for (ac = 0; size > 1; size -= 2, p += 2) {
ac += ((*p) << 8) + *(p + 1);
+ }
- if (size > 0)
+ if (size > 0) {
ac += ((*p) << 8);
+ }
ac += (ac >> 16) & 0xffff;
return ((uint16_t)(ac & 0xffff));
p = source->base;
size = source->length;
+ if (source->base[3] == DST_ALG_RSAMD5) {
+ ac = (p[size - 3] << 8) + p[size - 2];
+ if (size == 4U) {
+ ac |= (DNS_KEYFLAG_REVOKE<<8);
+ }
+ return (ac);
+ }
+
ac = ((*p) << 8) + *(p + 1);
ac |= DNS_KEYFLAG_REVOKE;
- for (size -= 2, p +=2; size > 1; size -= 2, p += 2)
+ for (size -= 2, p +=2; size > 1; size -= 2, p += 2) {
ac += ((*p) << 8) + *(p + 1);
+ }
- if (size > 0)
+ if (size > 0) {
ac += ((*p) << 8);
+ }
ac += (ac >> 16) & 0xffff;
return ((uint16_t)(ac & 0xffff));