~ubuntu-branches/ubuntu/raring/trousers/raring-proposed

« back to all changes in this revision

Viewing changes to src/tspi/daa/daa_issuer/issuer_setup.c

  • Committer: Package Import Robot
  • Author(s): Pierre Chifflier
  • Date: 2012-06-18 22:22:21 UTC
  • mfrom: (0.1.22 sid)
  • Revision ID: package-import@ubuntu.com-20120618222221-kumdab5nrfx4kvyh
Tags: 0.3.9-1
* Imported Upstream version 0.3.9
* Refreshed Debian patches
* Removed patch 04-gcc46.patch, not required anymore

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Licensed Materials - Property of IBM
 
3
 *
 
4
 * trousers - An open source TCG Software Stack
 
5
 *
 
6
 * (C) Copyright International Business Machines Corp. 2006
 
7
 *
 
8
 */
 
9
 
 
10
#include <stdlib.h>
 
11
#include <stdio.h>
 
12
#include <string.h>
 
13
#include <errno.h>
 
14
 
 
15
#include "trousers/tss.h"
 
16
#include "spi_internal_types.h"
 
17
#include "spi_utils.h"
 
18
#include "obj.h"
 
19
// #include "tcslog.h"
 
20
#include "bi.h"
 
21
#include "daa_parameter.h"
 
22
#include "issuer.h"
 
23
 
 
24
static char *DEFAULT_FILENAME = "issuer.txt";
 
25
static char *DEFAULT_ISSUER = "IBM-Issuer";
 
26
 
 
27
static const int DEFAULT_ISSUER_ATTRIBUTES = 2; // A1 A2
 
28
static const int DEFAULT_RECEIVER_ATTRIBUTES = 3;       // A3 A4 A5
 
29
 
 
30
int print_usage(char *cmd) {
 
31
        fprintf(stderr, "usage: %s\n", cmd);
 
32
        fprintf(stderr, "       \t-npa,\t--nb_platform_attr\tnumber of attributes that the\
 
33
 Platform can choose and which will not be visible to the Issuer (default: %d)\n",
 
34
                        DEFAULT_ISSUER_ATTRIBUTES);
 
35
        fprintf(stderr, "       \t-nia,\t--nb_issuer_attr\tnumber of attributes that the issuer\
 
36
 can choose and which will be visible to both the Platform and the Issuer(default: %d)\n",
 
37
                        DEFAULT_RECEIVER_ATTRIBUTES);
 
38
        fprintf(stderr, "       \t-if,\t--issuer_file\tthe file that will contain all key pair\
 
39
 and proof to be used by the issuer (default: %s)\n",
 
40
                        DEFAULT_FILENAME);
 
41
        fprintf(stderr, "       \t-i,\t--issuer\tissuer identity (default: %s)\n",
 
42
                        DEFAULT_ISSUER);
 
43
        return -1;
 
44
}
 
45
 
 
46
int main(int argc, char *argv[]) {
 
47
        int nb_platform_attr = DEFAULT_ISSUER_ATTRIBUTES;
 
48
        int nb_issuer_attr = DEFAULT_RECEIVER_ATTRIBUTES;
 
49
        char *filename = DEFAULT_FILENAME;
 
50
        char *issuer = DEFAULT_ISSUER;
 
51
        int i;
 
52
        char *param;
 
53
        TSS_HCONTEXT hContext;
 
54
        TSS_DAA_KEY_PAIR *key_pair;
 
55
        TSS_DAA_PK_PROOF *public_keyproof;
 
56
        TSS_RESULT result;
 
57
        TSS_HDAA hDAA;
 
58
        TSS_DAA_PK_PROOF_internal *public_keyproof_internal;
 
59
        TSS_DAA_PK_internal *pk;
 
60
        TSS_DAA_PRIVATE_KEY *private_key;
 
61
        DAA_PRIVATE_KEY_internal *private_key_internal;
 
62
        KEY_PAIR_WITH_PROOF_internal *key_pair_with_proof;
 
63
 
 
64
        printf("Issuer Setup (%s:%s,%s)\n", argv[0], __DATE__, __TIME__);
 
65
        i = 1;
 
66
        while( i < argc) {
 
67
                param = argv[ i];
 
68
                if         ( strcmp( param, "-if") == 0 || strcmp( param, "--issuer_file")) {
 
69
                        i++;
 
70
                        if( i == argc) return print_usage( argv[0]);
 
71
                        filename = argv[i];
 
72
                } else if( strcmp( param, "-npa") == 0 || strcmp( param, "--nb_platform_attr")) {
 
73
                        i++;
 
74
                        if( i == argc) return print_usage( argv[0]);
 
75
                        nb_platform_attr = atoi( argv[i]);
 
76
                } else if( strcmp( param, "-nia") == 0 || strcmp( param, "--nb_issuer_attr")) {
 
77
                        i++;
 
78
                        if( i == argc) return print_usage( argv[0]);
 
79
                        nb_issuer_attr = atoi(argv[i]);
 
80
                } else if( strcmp( param, "-i") == 0 || strcmp( param, "--issuer")) {
 
81
                        i++;
 
82
                        if( i == argc) return print_usage( argv[0]);
 
83
                        issuer = argv[i];
 
84
                } else {
 
85
                        fprintf(stderr,         "%s:unrecognized option `%s'\n", argv[0], param);
 
86
                        return print_usage( argv[0]);
 
87
                }
 
88
                i++;
 
89
        }
 
90
        bi_init( NULL);
 
91
        // Create Context
 
92
        printf("Create Context\n");
 
93
        result = Tspi_Context_Create( &hContext );
 
94
        if ( result != TSS_SUCCESS )
 
95
        {
 
96
                fprintf( stderr, "Tspi_Context_Create %d\n", result );
 
97
                exit( result );
 
98
        }
 
99
 
 
100
        // Connect to Context
 
101
        printf("Connect to the context\n");
 
102
        result = Tspi_Context_Connect( hContext, NULL );
 
103
        if ( result != TSS_SUCCESS )
 
104
        {
 
105
                fprintf( stderr, "Tspi_Context_Connect error:%d\n", result );
 
106
                Tspi_Context_FreeMemory( hContext, NULL );
 
107
                Tspi_Context_Close( hContext );
 
108
                exit( result );
 
109
        }
 
110
        //Create Object
 
111
        result = obj_daa_add( hContext, &hDAA);
 
112
        if (result != TSS_SUCCESS) {
 
113
                goto close;
 
114
        }
 
115
        result = Tspi_DAA_IssueSetup(
 
116
                hDAA,   // in
 
117
                strlen( issuer),        // in
 
118
                (BYTE *)issuer, // in
 
119
                nb_platform_attr,       // in
 
120
                nb_issuer_attr, // in
 
121
                (TSS_HKEY *)&key_pair,  // out
 
122
                &public_keyproof);      // out
 
123
        if( result != TSS_SUCCESS) goto close;
 
124
 
 
125
        // TSS_DAA_KEY_PAIR_internal *key_pair_internal = DAA_KEY_PAIR_2_internal( key_pair);
 
126
        public_keyproof_internal = e_2_i_TSS_DAA_PK_PROOF( public_keyproof);
 
127
        pk = e_2_i_TSS_DAA_PK( key_pair->public_key);
 
128
        private_key = key_pair->private_key;
 
129
        private_key_internal = e_2_i_TSS_DAA_PRIVATE_KEY( private_key);
 
130
        key_pair_with_proof =
 
131
                (KEY_PAIR_WITH_PROOF_internal *)malloc( sizeof(KEY_PAIR_WITH_PROOF_internal));
 
132
        if( key_pair_with_proof == NULL) {
 
133
                fprintf("malloc of %d bytes failed", sizeof(KEY_PAIR_WITH_PROOF_internal));
 
134
                goto close;
 
135
        }
 
136
        key_pair_with_proof->pk = pk;
 
137
        key_pair_with_proof->private_key = private_key_internal;
 
138
        key_pair_with_proof->proof = public_keyproof_internal;
 
139
 
 
140
        printf("Saving key pair with proof  ->  \'%s\'", filename);
 
141
        FILE *file = fopen( filename, "w");
 
142
        if( file == NULL) {
 
143
                fprintf( stderr, "%s: Error when saving \'%s\': %s\n",
 
144
                        argv[0],
 
145
                        filename,
 
146
                        strerror( errno));
 
147
                return -1;
 
148
        }
 
149
        if( save_KEY_PAIR_WITH_PROOF( file, key_pair_with_proof) != 0) {
 
150
                fprintf( stderr, "%s: Error when saving \'%s\': %s\n",
 
151
                        argv[0],
 
152
                        filename,
 
153
                        strerror( errno));
 
154
                return -1;
 
155
        }
 
156
        fclose( file);
 
157
        printf("\nDone.\n");
 
158
close:
 
159
        obj_daa_remove( hDAA, hContext);
 
160
        printf("Closing the context\n");
 
161
        Tspi_Context_FreeMemory( hContext, NULL );
 
162
        Tspi_Context_Close( hContext );
 
163
        bi_release();
 
164
        printf("Result: %d", result);
 
165
        return result;
 
166
}