Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(305)

Side by Side Diff: srtp/crypto/math/datatypes.c

Issue 889083003: Update libsrtp to upstream 1.5.0 (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/libsrtp@master
Patch Set: Updated to libsrtp 1.5.1 Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « srtp/crypto/kernel/key.c ('k') | srtp/crypto/math/gf2_8.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * datatypes.c 2 * datatypes.c
3 * 3 *
4 * data types for finite fields and functions for input, output, and 4 * data types for finite fields and functions for input, output, and
5 * manipulation 5 * manipulation
6 * 6 *
7 * David A. McGrew 7 * David A. McGrew
8 * Cisco Systems, Inc. 8 * Cisco Systems, Inc.
9 */ 9 */
10 /* 10 /*
(...skipping 25 matching lines...) Expand all
36 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 36 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
37 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 37 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
38 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
39 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
40 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 40 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
41 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 41 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
42 * OF THE POSSIBILITY OF SUCH DAMAGE. 42 * OF THE POSSIBILITY OF SUCH DAMAGE.
43 * 43 *
44 */ 44 */
45 45
46 #ifdef HAVE_CONFIG_H
47 #include <config.h>
48 #endif
49
46 #include "datatypes.h" 50 #include "datatypes.h"
47 51
48 int 52 int
49 octet_weight[256] = { 53 octet_weight[256] = {
50 0, 1, 1, 2, 1, 2, 2, 3, 54 0, 1, 1, 2, 1, 2, 2, 3,
51 1, 2, 2, 3, 2, 3, 3, 4, 55 1, 2, 2, 3, 2, 3, 3, 4,
52 1, 2, 2, 3, 2, 3, 3, 4, 56 1, 2, 2, 3, 2, 3, 3, 4,
53 2, 3, 3, 4, 3, 4, 4, 5, 57 2, 3, 3, 4, 3, 4, 4, 5,
54 1, 2, 2, 3, 2, 3, 3, 4, 58 1, 2, 2, 3, 2, 3, 3, 4,
55 2, 3, 3, 4, 3, 4, 4, 5, 59 2, 3, 3, 4, 3, 4, 4, 5,
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 length = MAX_PRINT_STRING_LEN-1; 121 length = MAX_PRINT_STRING_LEN-1;
118 122
119 for (i=0; i < length; i+=2) { 123 for (i=0; i < length; i+=2) {
120 bit_string[i] = nibble_to_hex_char(*str >> 4); 124 bit_string[i] = nibble_to_hex_char(*str >> 4);
121 bit_string[i+1] = nibble_to_hex_char(*str++ & 0xF); 125 bit_string[i+1] = nibble_to_hex_char(*str++ & 0xF);
122 } 126 }
123 bit_string[i] = 0; /* null terminate string */ 127 bit_string[i] = 0; /* null terminate string */
124 return bit_string; 128 return bit_string;
125 } 129 }
126 130
127 static INLINE int 131 static inline int
128 hex_char_to_nibble(uint8_t c) { 132 hex_char_to_nibble(uint8_t c) {
129 switch(c) { 133 switch(c) {
130 case ('0'): return 0x0; 134 case ('0'): return 0x0;
131 case ('1'): return 0x1; 135 case ('1'): return 0x1;
132 case ('2'): return 0x2; 136 case ('2'): return 0x2;
133 case ('3'): return 0x3; 137 case ('3'): return 0x3;
134 case ('4'): return 0x4; 138 case ('4'): return 0x4;
135 case ('5'): return 0x5; 139 case ('5'): return 0x5;
136 case ('6'): return 0x6; 140 case ('6'): return 0x6;
137 case ('7'): return 0x7; 141 case ('7'): return 0x7;
(...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after
518 void 522 void
519 octet_string_set_to_zero(uint8_t *s, int len) { 523 octet_string_set_to_zero(uint8_t *s, int len) {
520 uint8_t *end = s + len; 524 uint8_t *end = s + len;
521 525
522 do { 526 do {
523 *s = 0; 527 *s = 0;
524 } while (++s < end); 528 } while (++s < end);
525 529
526 } 530 }
527 531
532 #ifdef TESTAPP_SOURCE
528 533
529 /* 534 static const char b64chars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
530 * From RFC 1521: The Base64 Alphabet 535 "abcdefghijklmnopqrstuvwxyz0123456789+/";
531 *
532 * Value Encoding Value Encoding Value Encoding Value Encoding
533 * 0 A 17 R 34 i 51 z
534 * 1 B 18 S 35 j 52 0
535 * 2 C 19 T 36 k 53 1
536 * 3 D 20 U 37 l 54 2
537 * 4 E 21 V 38 m 55 3
538 * 5 F 22 W 39 n 56 4
539 * 6 G 23 X 40 o 57 5
540 * 7 H 24 Y 41 p 58 6
541 * 8 I 25 Z 42 q 59 7
542 * 9 J 26 a 43 r 60 8
543 * 10 K 27 b 44 s 61 9
544 * 11 L 28 c 45 t 62 +
545 * 12 M 29 d 46 u 63 /
546 * 13 N 30 e 47 v
547 * 14 O 31 f 48 w (pad) =
548 * 15 P 32 g 49 x
549 * 16 Q 33 h 50 y
550 */
551 536
552 int 537 static int base64_block_to_octet_triple(char *out, char *in) {
553 base64_char_to_sextet(uint8_t c) { 538 unsigned char sextets[4] = {};
554 switch(c) { 539 int j = 0;
555 case 'A': 540 int i;
556 return 0; 541
557 case 'B': 542 for (i = 0; i < 4; i++) {
558 return 1; 543 char *p = strchr(b64chars, in[i]);
559 case 'C': 544 if (p != NULL) sextets[i] = p - b64chars;
560 return 2; 545 else j++;
561 case 'D': 546 }
562 return 3; 547
563 case 'E': 548 out[0] = (sextets[0]<<2)|(sextets[1]>>4);
564 return 4; 549 if (j < 2) out[1] = (sextets[1]<<4)|(sextets[2]>>2);
565 case 'F': 550 if (j < 1) out[2] = (sextets[2]<<6)|sextets[3];
566 return 5; 551 return j;
567 case 'G':
568 return 6;
569 case 'H':
570 return 7;
571 case 'I':
572 return 8;
573 case 'J':
574 return 9;
575 case 'K':
576 return 10;
577 case 'L':
578 return 11;
579 case 'M':
580 return 12;
581 case 'N':
582 return 13;
583 case 'O':
584 return 14;
585 case 'P':
586 return 15;
587 case 'Q':
588 return 16;
589 case 'R':
590 return 17;
591 case 'S':
592 return 18;
593 case 'T':
594 return 19;
595 case 'U':
596 return 20;
597 case 'V':
598 return 21;
599 case 'W':
600 return 22;
601 case 'X':
602 return 23;
603 case 'Y':
604 return 24;
605 case 'Z':
606 return 25;
607 case 'a':
608 return 26;
609 case 'b':
610 return 27;
611 case 'c':
612 return 28;
613 case 'd':
614 return 29;
615 case 'e':
616 return 30;
617 case 'f':
618 return 31;
619 case 'g':
620 return 32;
621 case 'h':
622 return 33;
623 case 'i':
624 return 34;
625 case 'j':
626 return 35;
627 case 'k':
628 return 36;
629 case 'l':
630 return 37;
631 case 'm':
632 return 38;
633 case 'n':
634 return 39;
635 case 'o':
636 return 40;
637 case 'p':
638 return 41;
639 case 'q':
640 return 42;
641 case 'r':
642 return 43;
643 case 's':
644 return 44;
645 case 't':
646 return 45;
647 case 'u':
648 return 46;
649 case 'v':
650 return 47;
651 case 'w':
652 return 48;
653 case 'x':
654 return 49;
655 case 'y':
656 return 50;
657 case 'z':
658 return 51;
659 case '0':
660 return 52;
661 case '1':
662 return 53;
663 case '2':
664 return 54;
665 case '3':
666 return 55;
667 case '4':
668 return 56;
669 case '5':
670 return 57;
671 case '6':
672 return 58;
673 case '7':
674 return 59;
675 case '8':
676 return 60;
677 case '9':
678 return 61;
679 case '+':
680 return 62;
681 case '/':
682 return 63;
683 case '=':
684 return 64;
685 default:
686 break;
687 }
688 return -1;
689 } 552 }
690 553
691 /* 554 int base64_string_to_octet_string(char *out, int *pad, char *in, int len) {
692 * base64_string_to_octet_string converts a hexadecimal string 555 int k = 0;
693 * of length 2 * len to a raw octet string of length len 556 int i = 0;
694 */ 557 int j = 0;
558 if (len % 4 != 0) return 0;
695 559
696 int 560 while (i < len && j == 0) {
697 base64_string_to_octet_string(char *raw, char *base64, int len) { 561 j = base64_block_to_octet_triple(out + k, in + i);
698 uint8_t x; 562 k += 3;
699 int tmp; 563 i += 4;
700 int base64_len; 564 }
565 *pad = j;
566 return i;
567 }
701 568
702 base64_len = 0; 569 #endif
703 while (base64_len < len) {
704 tmp = base64_char_to_sextet(base64[0]);
705 if (tmp == -1)
706 return base64_len;
707 x = (tmp << 6);
708 base64_len++;
709 tmp = base64_char_to_sextet(base64[1]);
710 if (tmp == -1)
711 return base64_len;
712 x |= (tmp & 0xffff);
713 base64_len++;
714 *raw++ = x;
715 base64 += 2;
716 }
717 return base64_len;
718 }
OLDNEW
« no previous file with comments | « srtp/crypto/kernel/key.c ('k') | srtp/crypto/math/gf2_8.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698