Bug fix and authoring
[src/app-framework-main.git] / src / wgtpkg.h
1 /*
2  Copyright 2015 IoT.bzh
3
4  author: José Bollo <jose.bollo@iot.bzh>
5
6  Licensed under the Apache License, Version 2.0 (the "License");
7  you may not use this file except in compliance with the License.
8  You may obtain a copy of the License at
9
10      http://www.apache.org/licenses/LICENSE-2.0
11
12  Unless required by applicable law or agreed to in writing, software
13  distributed under the License is distributed on an "AS IS" BASIS,
14  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  See the License for the specific language governing permissions and
16  limitations under the License.
17 */
18
19
20 #include <libxml/tree.h>
21 #include "config.h"
22
23 struct filedesc;
24
25 /**************************************************************/
26 /* from wgtpkg-base64 */
27
28 extern char *base64encw(const char *buffer, int length, int width);
29 extern char *base64enc(const char *buffer, int length);
30 extern int base64dec(const char *buffer, char **output);
31 extern int base64eq(const char *buf1, const char *buf2);
32
33 /**************************************************************/
34 /* from wgtpkg-certs */
35
36 extern void clear_certificates();
37 extern int add_certificate_b64(const char *b64);
38
39 /**************************************************************/
40 /* from wgtpkg-digsig */
41
42 /* verify the digital signature in file */
43 extern int verify_digsig(struct filedesc *fdesc);
44
45 /* create a digital signature */
46 extern int create_digsig(int index, const char *key, const char **certs);
47
48 /* check the signatures of the current directory */
49 extern int check_all_signatures();
50
51 /**************************************************************/
52 /* from wgtpkg-files */
53
54 enum entrytype {
55         type_unset = 0,
56         type_file = 1,
57         type_directory = 2
58 };
59
60 enum fileflag {
61         flag_referenced = 1,
62         flag_opened = 2,
63         flag_author_signature = 4,
64         flag_distributor_signature = 8,
65         flag_signature = 12
66 };
67
68 struct filedesc {
69         enum entrytype type;
70         unsigned int flags;
71         unsigned int signum;
72         unsigned int zindex;
73         char name[1];
74 };
75
76 extern void file_reset();
77 extern void file_clear_flags();
78 extern unsigned int file_count();
79 extern struct filedesc *file_of_index(unsigned int index);
80 extern struct filedesc *file_of_name(const char *name);
81 extern struct filedesc *file_add_directory(const char *name);
82 extern struct filedesc *file_add_file(const char *name);
83 extern int fill_files();
84
85 extern unsigned int signature_count();
86 extern struct filedesc *signature_of_index(unsigned int index);
87 extern struct filedesc *create_signature(unsigned int number);
88 extern struct filedesc *get_signature(unsigned int number);
89
90 extern int file_set_prop(struct filedesc *file, const char *name, const char *value);
91 extern const char *file_get_prop(struct filedesc *file, const char *name);
92
93 /**************************************************************/
94 /* from wgtpkg-install */
95
96 extern void install_widget(const char *wgtfile, const char *root, int force);
97
98 /**************************************************************/
99 /* from wgtpkg-permission */
100
101 extern int is_standard_permission(const char *name);
102 extern void reset_permissions();
103 extern void crop_permissions(unsigned level);
104 extern void grant_permission_list(const char *list);
105 extern int permission_exists(const char *name);
106 extern int request_permission(const char *name);
107 extern const char *first_usable_permission();
108 extern const char *next_usable_permission();
109
110 /**************************************************************/
111 /* from wgtpkg-workdir */
112
113 extern char workdir[PATH_MAX];
114 extern int workdirfd;
115 extern void remove_workdir();
116 extern int set_workdir(const char *name, int create);
117 extern int make_workdir_base(const char *root, const char *prefix, int reuse);
118 extern int make_workdir(int reuse);
119 extern int move_workdir(const char *dest, int parents, int force);
120
121 /**************************************************************/
122 /* from wgtpkg-xmlsec */
123
124 extern int xmlsec_init();
125 extern void xmlsec_shutdown();
126 extern int xmlsec_verify(xmlNodePtr node);
127 extern xmlDocPtr xmlsec_create(int index, const char *key, const char **certs);
128
129 /**************************************************************/
130 /* from wgtpkg-zip */
131
132 /* read (extract) 'zipfile' in current directory */
133 extern int zread(const char *zipfile, unsigned long long maxsize);
134
135 /* write (pack) content of the current directory in 'zipfile' */
136 extern int zwrite(const char *zipfile);
137
138