~ubuntu-branches/ubuntu/raring/gnupg2/raring-proposed

« back to all changes in this revision

Viewing changes to common/t-ssh-utils.c

  • Committer: Package Import Robot
  • Author(s): Sebastien Bacher
  • Date: 2012-11-06 11:25:58 UTC
  • mfrom: (14.1.3 sid)
  • Revision ID: package-import@ubuntu.com-20121106112558-kxptsug6ivixhx8m
Tags: 2.0.19-1ubuntu1
* Resynchronize on Debian, remaining changes:
  - Add udev rules to give gpg access to some smartcard readers;
    Debian #543217.
    . debian/gnupg2.dev: udev rules to set ACLs on SCM smartcard readers.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* t-ssh-utils.c - Module test for ssh-utils.c
 
2
 * Copyright (C) 2011 Free Software Foundation, Inc.
 
3
 *
 
4
 * This file is part of GnuPG.
 
5
 *
 
6
 * GnuPG is free software; you can redistribute it and/or modify
 
7
 * it under the terms of the GNU General Public License as published by
 
8
 * the Free Software Foundation; either version 3 of the License, or
 
9
 * (at your option) any later version.
 
10
 *
 
11
 * GnuPG is distributed in the hope that it will be useful,
 
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
14
 * GNU General Public License for more details.
 
15
 *
 
16
 * You should have received a copy of the GNU General Public License
 
17
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
 
18
 */
 
19
 
 
20
#include <config.h>
 
21
#include <stdio.h>
 
22
#include <stdlib.h>
 
23
#include <assert.h>
 
24
#include <sys/stat.h>
 
25
#include <unistd.h>
 
26
 
 
27
#include "util.h"
 
28
#include "ssh-utils.h"
 
29
 
 
30
 
 
31
static struct { const char *key; const char *fpr; } sample_keys[] = {
 
32
  { "(protected-private-key "
 
33
    "(rsa "
 
34
    "(n #"
 
35
    "00D88E47BCE0DA99D6180E8A9F4E6A673CC16F5BB6CF930E0E868BAABA715A8E1D3E2BEA"
 
36
    "5477170E1F6CAFC0F8907B9892993C70AC476BBB301669F68EE0593532FB522DD60755A3"
 
37
    "2F8B08649E856271A7F9BCB25F29554DF11707F812EA377683A99DD4698C4DBF797A0ABF"
 
38
    "43C8EBB364B9FFC9EE78CBEA348C590507A4EA390312153DDD905EC4F1A63D5DA56C08FD"
 
39
    "C3F6E5707BFC5DBDC09D19723B1AC6E466906F13AA2ECDBD258148F86C980D45CF233415"
 
40
    "38C5857C2CF0B4C9AB2B4E6A4517FF084FDB009A33553A68907A29691B6FAE994E864F78"
 
41
    "7B83F714730BEDB0AF1723D636E034D73EB7EC9BA127BB4BE80FD805813E3F45E7FAE514"
 
42
    "AD2ECA9607#)"
 
43
    "(e \"#\")"
 
44
    "(protected openpgp-s2k3-sha1-aes-cbc "
 
45
    "("
 
46
    "(sha1 #B5847F9A2DB4E0C5# \"5242880\")"
 
47
    "#342D81BDE21301F18FDCE169A99A47C5#)"
 
48
    "#23512602219EC7A97DBA89347CCD59D2072D80CE3F7DD6C97A058B83DAB3C829D97DF5"
 
49
    "DFE9181F27DBF58258C4CDBD562A5B20BB5BC35EDCA7B1E57B8CDBF92D798F46EE5567BD"
 
50
    "8A67EF3BE09908A49D41AA166A3398B64227BC75021C69A8FE8354E2903EF52DC91B1FE3"
 
51
    "EF9558E5C2D34CF38BFC29E99A49AE30B0C22CE81EE14FC71E986E7C7CB5FCF807433FDA"
 
52
    "EF1D00985767265BA0BE333754E44CCF622CBB98A029D78A6A9AADBC24613127B6448350"
 
53
    "23DA355ED31CF089DD11A7FC6003CEEB53FB327A05604D053C99996F9E01CB355983F66E"
 
54
    "7BEB9687A9277BBF440ED5FAF1A8396C9B06C9B47BA7A994E1931B08DAD34449952CD343"
 
55
    "9A691477682C324EA07CCCE5DF0F0E9DAEFAE3A4717AACA6DC18ED91DD5A820C924BD36B"
 
56
    "B3BA85BD63B3180C7F94EE58956940621280B9628FA5CC560BB14331AF1A7B5B499F8F03"
 
57
    "0ED464ABD4E26C5FD610697EDD0FD1203983E73418F3776568A613D3CEFF17199473052A"
 
58
    "18807A6F5C52A2A643185801D087EE4DC930ABEEB67C5B8A1CB2F29D0ACBD855972BEC0B"
 
59
    "DE6E52387CFCC54B4C2B87EE947C97173BFCAE3E2658EB819D87F542C9A9FE6C410D08F5"
 
60
    "3CD5451FB50253F4A848DFE136B3A5861D58B76A26A7E3E4E7A8F8D4BD5B80430674A6B9"
 
61
    "A2C8EDD53DB37865D1ACBB07E1758DFF64A944E0126F948BF088C0FC0C3607E39522EC94"
 
62
    "91483A90D9498D7F6C3C8720124C7E3F6E271E78E1CFFB4EF64F070F7424F30372A07D02"
 
63
    "2355D8B17BB0DEBCBE101F621E0526551A35A56830D74E0F5BD6313DF114D1E46D4844AA"
 
64
    "E4EB6268637D04B27D200D7F40AFA9AD2CFAA5415E5FC08358FFA79A9E743CCDF6668FE5"
 
65
    "D79FA03D61941E57244F066A31F1C9D6A34DC62BC738C52B604F00B19EB9FD0173F3B139"
 
66
    "42932066B7DC94DC4C563392F798A1CE2D5D75B8FF93E440433263CFB7016143A9923CD9"
 
67
    "634E964A8056946F462B06F320F44449D85B07FA26A324505C858274F89EDBD8346950DE"
 
68
    "5F#)"
 
69
    "(protected-at \"20110720T135431\")"
 
70
    ")"
 
71
    "(comment passphrase_is_abc)"
 
72
    ")",
 
73
    "c7:c6:a7:ec:04:6c:87:59:54:f2:88:58:09:e0:f2:b1"
 
74
  },
 
75
  {
 
76
    "(protected-private-key "
 
77
    "(dsa "
 
78
    "(p #00FC7DC086F4517079BCCFA7FD229477FE88B0231038DFC21B29CCBD74C6F6FE04FD"
 
79
    "7248C0473D5028BE106D7A7C8F54B269225789E781763527D1432CD46E416C2D14DDCA70"
 
80
    "27DA4B92D1E222B5BDF4B9C8C761CACCFBD108F7729412E8835653BE5073447287A6BDEB"
 
81
    "4645A5411752405EE7F503E44B1DFDCA6054CD3C44630B#)"
 
82
    "(q #00D498505BF0E7EE01239EB51F2B400B8EF6329B17#)"
 
83
    "(g #00A127B3DD5106F0A463312E42ECB83790E6F3BEA7AC3FAF7A42FB2C00F376323676"
 
84
    "C9E48984F0D4AC3FE5856F1C2765E9BC3C8A5C9C9CD3166C057E82569D187C48591AA66B"
 
85
    "8966BFF2B827BE36BD0BA4B895B42136F1381D52DDA708B2A3D181F648228DFFFEB153DA"
 
86
    "ACCAEBB51EF08A7807CD628024CEFF96FEE97DE95C8CBE#)"
 
87
    "(y #008E2B0915A3A299D83B4333C848C5D312F25903773E8C4D50691CAF81C3B768FA41"
 
88
    "7D19F0FD437B377CCF51D3AE598649656D4D74D210CDBC2B76209B16EAAFCB14D6F4D691"
 
89
    "20164885852AF1CEBB4D8602AD6755DFA7163645B4DB7926CD44D2DD9F840BFEF57F3DB0"
 
90
    "933C85EB6B0AAC20BC67E73F47B8DDBEC8EFAA64286EF1#)"
 
91
    "(protected openpgp-s2k3-sha1-aes-cbc "
 
92
    "("
 
93
    "(sha1  \"ü¿jy²üa4\" \"5242880\")"
 
94
    "#FF12BEE0B03F842349717AE1AB6D7AC2#)"
 
95
    "#95570487C8B5C49492D4E662259F2CF9B6D7E64F728F17A1FE1B2DA616E5976FE32861E"
 
96
    "C4B1F0DA03D9006C432CF2136871266E9444377ACEF04340B36B4550B5C1E4CC69AD4380"
 
97
    "A709FB0DAA5104A8B#)"
 
98
    "(protected-at \"20110720T142801\")"
 
99
    ")"
 
100
    "(comment sample_dsa_passphrase_is_abc)"
 
101
    ")",
 
102
    "2d:b1:70:1a:04:9e:41:a3:ce:27:a5:c7:22:fe:3a:a3"
 
103
  },
 
104
  {
 
105
    NULL,
 
106
    NULL
 
107
  }
 
108
};
 
109
 
 
110
 
 
111
 
 
112
static char *
 
113
read_file (const char *fname, size_t *r_length)
 
114
{
 
115
  FILE *fp;
 
116
  char *buf;
 
117
  size_t buflen;
 
118
  struct stat st;
 
119
 
 
120
  fp = fopen (fname, "rb");
 
121
  if (!fp)
 
122
    {
 
123
      fprintf (stderr, "%s:%d: can't open `%s': %s\n",
 
124
               __FILE__, __LINE__, fname, strerror (errno));
 
125
      exit (1);
 
126
    }
 
127
 
 
128
  if (fstat (fileno(fp), &st))
 
129
    {
 
130
      fprintf (stderr, "%s:%d: can't stat `%s': %s\n",
 
131
               __FILE__, __LINE__, fname, strerror (errno));
 
132
      exit (1);
 
133
    }
 
134
 
 
135
  buflen = st.st_size;
 
136
  buf = xmalloc (buflen+1);
 
137
  if (fread (buf, buflen, 1, fp) != 1)
 
138
    {
 
139
      fprintf (stderr, "%s:%d: error reading `%s': %s\n",
 
140
               __FILE__, __LINE__, fname, strerror (errno));
 
141
      exit (1);
 
142
    }
 
143
  fclose (fp);
 
144
 
 
145
  *r_length = buflen;
 
146
  return buf;
 
147
}
 
148
 
 
149
 
 
150
static gcry_sexp_t
 
151
read_key (const char *fname)
 
152
{
 
153
  gpg_error_t err;
 
154
  char *buf;
 
155
  size_t buflen;
 
156
  gcry_sexp_t key;
 
157
 
 
158
  buf = read_file (fname, &buflen);
 
159
 
 
160
  err = gcry_sexp_sscan (&key, NULL, buf, buflen);
 
161
  if (err)
 
162
    {
 
163
      fprintf (stderr, "%s:%d: gcry_sexp_sscan failed: %s\n",
 
164
               __FILE__, __LINE__, gpg_strerror (err));
 
165
      exit (1);                                 \
 
166
    }
 
167
 
 
168
  xfree (buf);
 
169
  return key;
 
170
}
 
171
 
 
172
 
 
173
int
 
174
main (int argc, char **argv)
 
175
{
 
176
  gpg_error_t err;
 
177
  gcry_sexp_t key;
 
178
  char *string;
 
179
  int idx;
 
180
 
 
181
  if (argc == 2)
 
182
    {
 
183
      key = read_key (argv[1]);
 
184
      err = ssh_get_fingerprint_string (key, &string);
 
185
      if (err)
 
186
        {
 
187
          fprintf (stderr, "%s:%d: error getting fingerprint: %s\n",
 
188
                   __FILE__, __LINE__, gpg_strerror (err));
 
189
          exit (1);
 
190
        }
 
191
      puts (string);
 
192
      xfree (string);
 
193
      gcry_sexp_release (key);
 
194
    }
 
195
  else
 
196
    {
 
197
      for (idx=0; sample_keys[idx].key; idx++)
 
198
        {
 
199
          err = gcry_sexp_sscan (&key, NULL, sample_keys[idx].key,
 
200
                                 strlen (sample_keys[idx].key));
 
201
          if (err)
 
202
            {
 
203
              fprintf (stderr, "%s:%d: gcry_sexp_sscan failed for "
 
204
                       "sample key %d: %s\n",
 
205
                       __FILE__, __LINE__, idx, gpg_strerror (err));
 
206
              exit (1);
 
207
            }
 
208
 
 
209
          err = ssh_get_fingerprint_string (key, &string);
 
210
          gcry_sexp_release (key);
 
211
          if (err)
 
212
            {
 
213
              fprintf (stderr, "%s:%d: error getting fingerprint for "
 
214
                       "sample key %d: %s\n",
 
215
                       __FILE__, __LINE__, idx, gpg_strerror (err));
 
216
              exit (1);
 
217
            }
 
218
 
 
219
          if (strcmp (string, sample_keys[idx].fpr))
 
220
            {
 
221
              fprintf (stderr, "%s:%d: fingerprint mismatch for "
 
222
                       "sample key %d\n",
 
223
                       __FILE__, __LINE__, idx);
 
224
              fprintf (stderr, "want: %s\n got: %s\n",
 
225
                       sample_keys[idx].fpr, string);
 
226
              exit (1);
 
227
            }
 
228
          xfree (string);
 
229
        }
 
230
    }
 
231
 
 
232
  return 0;
 
233
}