Source: libu2f-server Version: 0.0.0-1 Tags: patch It's a recognisable pattern of failures on architectures with an unsigned char:
https://buildd.debian.org/status/package.php?p=libu2f-server&suite=sid The attached patch seems to fix the problem.
diff -ru libu2f-server-0.0.0.orig/u2f-server/cdecode.c libu2f-server-0.0.0/u2f-server/cdecode.c --- libu2f-server-0.0.0.orig/u2f-server/cdecode.c 2014-11-24 14:29:01.000000000 +0000 +++ libu2f-server-0.0.0/u2f-server/cdecode.c 2015-05-28 21:56:13.270000000 +0000 @@ -9,7 +9,7 @@ int base64_decode_value(char value_in) { - static const char decoding[] = + static const signed char decoding[] = { 62, -1, -1, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -2, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, @@ -35,11 +35,12 @@ int base64_decode_block(const char *code_in, const int length_in, - char *plaintext_out, base64_decodestate * state_in) + char *plaintext_out_, base64_decodestate * state_in) { const char *codechar = code_in; - char *plainchar = plaintext_out; - char fragment; + unsigned char *plaintext_out = (unsigned char *) plaintext_out_; + unsigned char *plainchar = plaintext_out; + signed char fragment; *plainchar = state_in->plainchar; @@ -52,7 +53,7 @@ state_in->plainchar = *plainchar; return plainchar - plaintext_out; } - fragment = (char) base64_decode_value(*codechar++); + fragment = (signed char) base64_decode_value(*codechar++); } while (fragment < 0); *plainchar = (fragment & 0x03f) << 2; @@ -63,7 +64,7 @@ state_in->plainchar = *plainchar; return plainchar - plaintext_out; } - fragment = (char) base64_decode_value(*codechar++); + fragment = (signed char) base64_decode_value(*codechar++); } while (fragment < 0); *plainchar++ |= (fragment & 0x030) >> 4; @@ -75,7 +76,7 @@ state_in->plainchar = *plainchar; return plainchar - plaintext_out; } - fragment = (char) base64_decode_value(*codechar++); + fragment = (signed char) base64_decode_value(*codechar++); } while (fragment < 0); *plainchar++ |= (fragment & 0x03c) >> 2; @@ -87,7 +88,7 @@ state_in->plainchar = *plainchar; return plainchar - plaintext_out; } - fragment = (char) base64_decode_value(*codechar++); + fragment = (signed char) base64_decode_value(*codechar++); } while (fragment < 0); *plainchar++ |= (fragment & 0x03f);