Implement writable key algorithm attributes
[gnuk/gnuk.git] / src / debug.c
1 /*
2  * debug.c -- Debuging with virtual COM port
3  *
4  * Copyright (C) 2010 Free Software Initiative of Japan
5  * Author: NIIBE Yutaka <gniibe@fsij.org>
6  *
7  * This file is a part of Gnuk, a GnuPG USB Token implementation.
8  *
9  * Gnuk is free software: you can redistribute it and/or modify it
10  * under the terms of the GNU General Public License as published by
11  * the Free Software Foundation, either version 3 of the License, or
12  * (at your option) any later version.
13  *
14  * Gnuk is distributed in the hope that it will be useful, but WITHOUT
15  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
17  * License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
21  *
22  */
23
24 #include <stdint.h>
25 #include <string.h>
26
27 extern void _write (const char *s, int len);
28
29 static void
30 put_hex (uint8_t nibble)
31 {
32   uint8_t c;
33
34   if (nibble < 0x0a)
35     c = '0' + nibble;
36   else
37     c = 'a' + nibble - 0x0a;
38
39   _write ((const char *)&c, 1);
40 }
41
42 void
43 put_byte (uint8_t b)
44 {
45   put_hex (b >> 4);
46   put_hex (b &0x0f);
47   _write ("\r\n", 2);
48 }
49
50 void
51 put_byte_with_no_nl (uint8_t b)
52 {
53   _write (" ", 1);
54   put_hex (b >> 4);
55   put_hex (b &0x0f);
56 }
57
58 void
59 put_short (uint16_t x)
60 {
61   put_hex (x >> 12);
62   put_hex ((x >> 8)&0x0f);
63   put_hex ((x >> 4)&0x0f);
64   put_hex (x & 0x0f);
65   _write ("\r\n", 2);
66 }
67
68 void
69 put_word (uint32_t x)
70 {
71   put_hex (x >> 28);
72   put_hex ((x >> 24)&0x0f);
73   put_hex ((x >> 20)&0x0f);
74   put_hex ((x >> 16)&0x0f);
75   put_hex ((x >> 12)&0x0f);
76   put_hex ((x >> 8)&0x0f);
77   put_hex ((x >> 4)&0x0f);
78   put_hex (x & 0x0f);
79   _write ("\r\n", 2);
80 }
81
82 void
83 put_int (uint32_t x)
84 {
85   char s[10];
86   int i;
87
88   for (i = 0; i < 10; i++)
89     {
90       s[i] = '0' + (x % 10);
91       x /= 10;
92       if (x == 0)
93         break;
94     }
95
96   while (i)
97     {
98       _write (s+i, 1);
99       i--;
100     }
101
102   _write (s, 1);
103   _write ("\r\n", 2);
104 }
105
106 void
107 put_binary (const char *s, int len)
108 {
109   int i;
110
111   for (i = 0; i < len; i++)
112     {
113       put_byte_with_no_nl (s[i]);
114       if ((i & 0x0f) == 0x0f)
115         _write ("\r\n", 2);
116       }
117   _write ("\r\n", 2);
118 }
119
120 void
121 put_string (const char *s)
122 {
123   _write (s, strlen (s));
124 }
125
126