Architecture specific change in rpms/golang-github-akrennmair-gopcap.git
by githook-noreply@fedoraproject.org
The package rpms/golang-github-akrennmair-gopcap.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/golang-github-akrennmair-gopcap.g....
Change:
-ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
Thanks.
Full change:
============
commit 4a8c556104f7915245b255655bd9b9ddfcf766f8
Author: Jan Chaloupka <jchaloup(a)redhat.com>
Date: Fri Jun 8 13:50:02 2018 +0200
Upload glide.lock and glide.yaml
diff --git a/glide.lock b/glide.lock
new file mode 100644
index 0000000..74aa63e
--- /dev/null
+++ b/glide.lock
@@ -0,0 +1,3 @@
+hash: 14c44035832b3d2f9a75691dbca33ad435510bed692f516c260f3d166380c078
+imports: []
+updated: '2018-06-08T11:47:28.436904+00:00'
diff --git a/glide.yaml b/glide.yaml
new file mode 100644
index 0000000..f2ea2d2
--- /dev/null
+++ b/glide.yaml
@@ -0,0 +1,3 @@
+import: []
+package: github.com/akrennmair/gopcap
+
diff --git a/golang-github-akrennmair-gopcap.spec b/golang-github-akrennmair-gopcap.spec
index e461ac5..9dbda7c 100644
--- a/golang-github-akrennmair-gopcap.spec
+++ b/golang-github-akrennmair-gopcap.spec
@@ -13,6 +13,8 @@ Summary: A simple wrapper around libpcap for the Go programming language
License: BSD
URL: %{gourl}
Source0: %{gosource}
+Source1: glide.lock
+Source2: glide.yaml
Patch0: Fix-formatting-error.patch
%description
@@ -36,9 +38,10 @@ building other packages which use import path with
%prep
%gosetup -q
%patch0 -p1
+cp %{SOURCE1} %{SOURCE2} .
%install
-%goinstall
+%goinstall glide.lock glide.yaml
%check
%gochecks
@@ -51,6 +54,7 @@ building other packages which use import path with
%changelog
* Fri Jun 08 2018 Jan Chaloupka <jchaloup(a)redhat.com> - 0-0.9.git.git00e1103
- Update to spec 3.0
+ Upload glide.lock and glide.yaml
* Mon Feb 26 2018 Jan Chaloupka <jchaloup(a)redhat.com> - 0-0.8.20150728git00e1103
- Autogenerate some parts using the new macros
commit b8058ee8117fa50fff470abf20169c63d93b8a8b
Author: Jan Chaloupka <jchaloup(a)redhat.com>
Date: Fri Jun 8 13:46:30 2018 +0200
Update to spec 3.0
diff --git a/.gitignore b/.gitignore
index 7f8002a..f782718 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-/gopcap-00e1103.tar.gz
+/gopcap-00e11033259acb75598ba416495bb708d864a010.tar.gz
diff --git a/Fix-formatting-error.patch b/Fix-formatting-error.patch
new file mode 100644
index 0000000..eb53482
--- /dev/null
+++ b/Fix-formatting-error.patch
@@ -0,0 +1,25 @@
+From e100ad337aee8a5974da57d480718ca03b23130f Mon Sep 17 00:00:00 2001
+From: Jan Chaloupka <jchaloup(a)redhat.com>
+Date: Fri, 8 Jun 2018 13:44:21 +0200
+Subject: [PATCH] Fix formatting error
+
+---
+ decode.go | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/decode.go b/decode.go
+index 4db19c0..5d26931 100644
+--- a/decode.go
++++ b/decode.go
+@@ -115,7 +115,7 @@ func (p *Packet) headerString(headers []interface{}) string {
+ if len(headers) >= 2 {
+ if addr, ok := headers[0].(addrHdr); ok {
+ if _, ok := headers[1].(addrHdr); ok {
+- return fmt.Sprintf("%s > %s IP in IP: ",
++ return fmt.Sprintf("%s > %s IP in IP: %s",
+ addr.SrcAddr(), addr.DestAddr(), p.headerString(headers[1:]))
+ }
+ }
+--
+2.7.5
+
diff --git a/golang-github-akrennmair-gopcap.spec b/golang-github-akrennmair-gopcap.spec
index 2727d05..e461ac5 100644
--- a/golang-github-akrennmair-gopcap.spec
+++ b/golang-github-akrennmair-gopcap.spec
@@ -1,20 +1,19 @@
# https://github.com/akrennmair/gopcap
-%global provider_prefix github.com/akrennmair/gopcap
-%global gobaseipath %{provider_prefix}
+%global goipath github.com/akrennmair/gopcap
%global commit 00e11033259acb75598ba416495bb708d864a010
-%global commitdate 20150728
-%gocraftmeta -i
+%gometa -i
Name: %{goname}
Version: 0
-Release: 0.8.%{commitdate}git%{shortcommit}%{?dist}
+Release: 0.9.git%{?dist}
Summary: A simple wrapper around libpcap for the Go programming language
# Detected licences
# - BSD (3 clause) at 'LICENSE'
License: BSD
URL: %{gourl}
Source0: %{gosource}
+Patch0: Fix-formatting-error.patch
%description
%{summary}
@@ -32,26 +31,27 @@ Requires: libpcap-devel
This package contains library source intended for
building other packages which use import path with
-%{gobaseipath} prefix.
+%{goipath} prefix.
%prep
-%gosetup
+%gosetup -q
+%patch0 -p1
%install
%goinstall
%check
-%gochecks %{gobaseipath}
+%gochecks
# github.com/akrennmair/gopcap
#./decode.go:118: Sprintf call needs 2 args but has 3 args
-#define license tag if not already defined
-%{!?_licensedir:%global license %doc}
-
%files devel -f devel.file-list
%license LICENSE
%changelog
+* Fri Jun 08 2018 Jan Chaloupka <jchaloup(a)redhat.com> - 0-0.9.git.git00e1103
+- Update to spec 3.0
+
* Mon Feb 26 2018 Jan Chaloupka <jchaloup(a)redhat.com> - 0-0.8.20150728git00e1103
- Autogenerate some parts using the new macros
diff --git a/sources b/sources
index 4971187..a9f106f 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-834add352c2cb69da43ac9df6c67624c gopcap-00e1103.tar.gz
+SHA512 (gopcap-00e11033259acb75598ba416495bb708d864a010.tar.gz) = b0ecab1bfd801ddca86266444a8342e22e1981d0ef8577b8bea88327b8a8b217fa09ae88a065a2efb85e285d06954345b54774ed9e03035a8ebaf1624cefcda1
commit b68878d0f645d5ae853cb5c5760bd1c9be1f8780
Author: Jan Chaloupka <jchaloup(a)redhat.com>
Date: Mon Feb 26 12:18:42 2018 +0100
Autogenerate some parts using the new macros
diff --git a/golang-github-akrennmair-gopcap.spec b/golang-github-akrennmair-gopcap.spec
index c34dc22..2727d05 100644
--- a/golang-github-akrennmair-gopcap.spec
+++ b/golang-github-akrennmair-gopcap.spec
@@ -1,169 +1,60 @@
-# If any of the following macros should be set otherwise,
-# you can wrap any of them with the following conditions:
-# - %%if 0%%{centos} == 7
-# - %%if 0%%{?rhel} == 7
-# - %%if 0%%{?fedora} == 23
-# Or just test for particular distribution:
-# - %%if 0%%{centos}
-# - %%if 0%%{?rhel}
-# - %%if 0%%{?fedora}
-#
-# Be aware, on centos, both %%rhel and %%centos are set. If you want to test
-# rhel specific macros, you can use %%if 0%%{?rhel} && 0%%{?centos} == 0 condition.
-# (Don't forget to replace double percentage symbol with single one in order to apply a condition)
-
-# Generate devel rpm
-%global with_devel 1
-# Build project from bundled dependencies
-%global with_bundled 0
-# Build with debug info rpm
-%global with_debug 0
-# Run tests in check section
-%global with_check 1
-# Generate unit-test rpm
-%global with_unit_test 1
-
-%if 0%{?with_debug}
-%global _dwz_low_mem_die_limit 0
-%else
-%global debug_package %{nil}
-%endif
-
-%global provider github
-%global provider_tld com
-%global project akrennmair
-%global repo gopcap
# https://github.com/akrennmair/gopcap
-%global provider_prefix %{provider}.%{provider_tld}/%{project}/%{repo}
-%global import_path %{provider_prefix}
+%global provider_prefix github.com/akrennmair/gopcap
+%global gobaseipath %{provider_prefix}
%global commit 00e11033259acb75598ba416495bb708d864a010
-%global shortcommit %(c=%{commit}; echo ${c:0:7})
+%global commitdate 20150728
-Name: golang-%{provider}-%{project}-%{repo}
+%gocraftmeta -i
+
+Name: %{goname}
Version: 0
-Release: 0.7.git%{shortcommit}%{?dist}
+Release: 0.8.%{commitdate}git%{shortcommit}%{?dist}
Summary: A simple wrapper around libpcap for the Go programming language
# Detected licences
# - BSD (3 clause) at 'LICENSE'
License: BSD
-URL: https://%{provider_prefix}
-Source0: https://%{provider_prefix}/archive/%{commit}/%{repo}-%{shortcommit}.tar.gz
-
-# e.g. el6 has ppc64 arch without gcc-go, so EA tag is required
-ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
-# If go_compiler is not set to 1, there is no virtual provide. Use golang instead.
-BuildRequires: %{?go_compiler:compiler(go-compiler)}%{!?go_compiler:golang}
+URL: %{gourl}
+Source0: %{gosource}
%description
%{summary}
-%if 0%{?with_devel}
%package devel
Summary: %{summary}
BuildArch: noarch
-%if 0%{?with_check}
BuildRequires: libpcap-devel
-%endif
Requires: libpcap-devel
-Provides: golang(%{import_path}) = %{version}-%{release}
-
%description devel
%{summary}
This package contains library source intended for
building other packages which use import path with
-%{import_path} prefix.
-%endif
-
-%if 0%{?with_unit_test} && 0%{?with_devel}
-%package unit-test-devel
-Summary: Unit tests for %{name} package
-%if 0%{?with_check}
-#Here comes all BuildRequires: PACKAGE the unit tests
-#in %%check section need for running
-%endif
-
-# test subpackage tests code from devel subpackage
-Requires: %{name}-devel = %{version}-%{release}
-
-%if 0%{?with_check}
-%endif
-
-%description unit-test-devel
-%{summary}
-
-This package contains unit tests for project
-providing packages with %{import_path} prefix.
-%endif
+%{gobaseipath} prefix.
%prep
-%setup -q -n %{repo}-%{commit}
-
-%build
+%gosetup
%install
-# source codes for building projects
-%if 0%{?with_devel}
-install -d -p %{buildroot}/%{gopath}/src/%{import_path}/
-echo "%%dir %%{gopath}/src/%%{import_path}/." >> devel.file-list
-# find all *.go but no *_test.go files and generate devel.file-list
-for file in $(find . -iname "*.go" \! -iname "*_test.go") ; do
- echo "%%dir %%{gopath}/src/%%{import_path}/$(dirname $file)" >> devel.file-list
- install -d -p %{buildroot}/%{gopath}/src/%{import_path}/$(dirname $file)
- cp -pav $file %{buildroot}/%{gopath}/src/%{import_path}/$file
- echo "%%{gopath}/src/%%{import_path}/$file" >> devel.file-list
-done
-%endif
-
-# testing files for this project
-%if 0%{?with_unit_test} && 0%{?with_devel}
-install -d -p %{buildroot}/%{gopath}/src/%{import_path}/
-# find all *_test.go files and generate unit-test-devel.file-list
-for file in $(find . -iname "*_test.go"); do
- echo "%%dir %%{gopath}/src/%%{import_path}/$(dirname $file)" >> devel.file-list
- install -d -p %{buildroot}/%{gopath}/src/%{import_path}/$(dirname $file)
- cp -pav $file %{buildroot}/%{gopath}/src/%{import_path}/$file
- echo "%%{gopath}/src/%%{import_path}/$file" >> unit-test-devel.file-list
-done
-%endif
-
-%if 0%{?with_devel}
-sort -u -o devel.file-list devel.file-list
-%endif
+%goinstall
%check
-%if 0%{?with_check} && 0%{?with_unit_test} && 0%{?with_devel}
-%if ! 0%{?with_bundled}
-export GOPATH=%{buildroot}/%{gopath}:%{gopath}
-%else
-export GOPATH=%{buildroot}/%{gopath}:$(pwd)/Godeps/_workspace:%{gopath}
-%endif
-
-%if ! 0%{?gotest:1}
-%global gotest go test
-%endif
-
-%gotest %{import_path}
-%endif
+%gochecks %{gobaseipath}
+# github.com/akrennmair/gopcap
+#./decode.go:118: Sprintf call needs 2 args but has 3 args
#define license tag if not already defined
%{!?_licensedir:%global license %doc}
-%if 0%{?with_devel}
%files devel -f devel.file-list
%license LICENSE
-%dir %{gopath}/src/%{provider}.%{provider_tld}/%{project}
-%endif
-
-%if 0%{?with_unit_test} && 0%{?with_devel}
-%files unit-test-devel -f unit-test-devel.file-list
-%license LICENSE
-%endif
%changelog
+* Mon Feb 26 2018 Jan Chaloupka <jchaloup(a)redhat.com> - 0-0.8.20150728git00e1103
+- Autogenerate some parts using the new macros
+
* Wed Feb 07 2018 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.7.git00e1103
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
commit 39799ab2f7cc41bedc9f7f3bb324b6dca68bdeb5
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Wed Feb 7 13:55:50 2018 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/golang-github-akrennmair-gopcap.spec b/golang-github-akrennmair-gopcap.spec
index 0a74d98..c34dc22 100644
--- a/golang-github-akrennmair-gopcap.spec
+++ b/golang-github-akrennmair-gopcap.spec
@@ -41,7 +41,7 @@
Name: golang-%{provider}-%{project}-%{repo}
Version: 0
-Release: 0.6.git%{shortcommit}%{?dist}
+Release: 0.7.git%{shortcommit}%{?dist}
Summary: A simple wrapper around libpcap for the Go programming language
# Detected licences
# - BSD (3 clause) at 'LICENSE'
@@ -164,6 +164,9 @@ export GOPATH=%{buildroot}/%{gopath}:$(pwd)/Godeps/_workspace:%{gopath}
%endif
%changelog
+* Wed Feb 07 2018 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.7.git00e1103
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
+
* Wed Aug 02 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.6.git00e1103
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
5 years, 11 months
Architecture specific change in rpms/golang-github-abbot-go-http-auth.git
by githook-noreply@fedoraproject.org
The package rpms/golang-github-abbot-go-http-auth.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/golang-github-abbot-go-http-auth.....
Change:
-ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
Thanks.
Full change:
============
commit b394099042239b3586bdc405fea7c2d2f79b3790
Author: Jan Chaloupka <jchaloup(a)redhat.com>
Date: Fri Jun 8 10:46:01 2018 +0200
Upload glide.lock and glide.yaml files
diff --git a/glide.lock b/glide.lock
new file mode 100644
index 0000000..1b573d4
--- /dev/null
+++ b/glide.lock
@@ -0,0 +1,3 @@
+hash: 03526ecd49ce2bac2a3d8daf9f34ef89f7fee05791c0bc03a23534bd93bf1295
+imports: []
+updated: '2018-06-08T08:43:29.517771+00:00'
diff --git a/glide.yaml b/glide.yaml
new file mode 100644
index 0000000..be72de1
--- /dev/null
+++ b/glide.yaml
@@ -0,0 +1,3 @@
+import: []
+package: github.com/abbot/go-http-auth
+
diff --git a/golang-github-abbot-go-http-auth.spec b/golang-github-abbot-go-http-auth.spec
index ad11f62..c809681 100644
--- a/golang-github-abbot-go-http-auth.spec
+++ b/golang-github-abbot-go-http-auth.spec
@@ -6,11 +6,13 @@
Name: golang-github-abbot-go-http-auth
Version: 0
-Release: 0.14%{?dist}
+Release: 0.15%{?dist}
Summary: Basic and Digest HTTP Authentication for golang http
License: ASL 2.0
URL: %{gourl}
Source0: %{gosource}
+Source1: glide.lock
+Source2: glide.yaml
%description
This is an implementation of HTTP Basic
@@ -30,9 +32,10 @@ building other packages which use import path with
%prep
%gosetup
+cp %{SOURCE1} %{SOURCE2} .
%install
-%goinstall test.htdigest test.htpasswd
+%goinstall test.htdigest test.htpasswd glide.lock glide.yaml
%check
%gochecks
@@ -45,6 +48,9 @@ building other packages which use import path with
%doc README.md
%changelog
+* Fri Jun 08 2018 Jan Chaloupka <jchaloup(a)redhat.com> - 0-0.15.gitc0ef453
+- Upload glide.lock and glide.yaml files
+
* Mon Mar 05 2018 Jan Chaloupka <jchaloup(a)redhat.com> - 0-0.14.gitc0ef453
- Update to spec 3.0
commit f5c25593ed95b9750fe669f431d717f432b8da69
Author: Jan Chaloupka <jchaloup(a)redhat.com>
Date: Mon Mar 5 14:36:08 2018 +0100
Fix the package name
diff --git a/golang-github-abbot-go-http-auth.spec b/golang-github-abbot-go-http-auth.spec
index 96e5228..ad11f62 100644
--- a/golang-github-abbot-go-http-auth.spec
+++ b/golang-github-abbot-go-http-auth.spec
@@ -4,7 +4,7 @@
%gometa -i
-Name: %{goname}
+Name: golang-github-abbot-go-http-auth
Version: 0
Release: 0.14%{?dist}
Summary: Basic and Digest HTTP Authentication for golang http
commit 7fdc14a9b450e35c7fa244ea6817c4d119892cb6
Author: Jan Chaloupka <jchaloup(a)redhat.com>
Date: Mon Mar 5 13:04:15 2018 +0100
Update to spec 3.0
diff --git a/.gitignore b/.gitignore
index cbfe4f8..908a251 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-/go-http-auth-c0ef453.tar.gz
+/go-http-auth-c0ef4539dfab4d21c8ef20ba2924f9fc6f186d35.tar.gz
diff --git a/golang-github-abbot-go-http-auth.spec b/golang-github-abbot-go-http-auth.spec
index abb8d22..96e5228 100644
--- a/golang-github-abbot-go-http-auth.spec
+++ b/golang-github-abbot-go-http-auth.spec
@@ -1,14 +1,12 @@
# https://github.com/abbot/go-http-auth
-%global provider_prefix github.com/abbot/go-http-auth
-%global gobaseipath %{provider_prefix}
+%global goipath github.com/abbot/go-http-auth
%global commit c0ef4539dfab4d21c8ef20ba2924f9fc6f186d35
-%global commitdate 20140619
-%gocraftmeta -i
+%gometa -i
Name: %{goname}
Version: 0
-Release: 0.13.%{commitdate}git%{shortcommit}%{?dist}
+Release: 0.14%{?dist}
Summary: Basic and Digest HTTP Authentication for golang http
License: ASL 2.0
URL: %{gourl}
@@ -28,7 +26,7 @@ BuildArch: noarch
This package contains library source intended for
building other packages which use import path with
-%{gobaseipath} prefix.
+%{goipath} prefix.
%prep
%gosetup
@@ -47,6 +45,9 @@ building other packages which use import path with
%doc README.md
%changelog
+* Mon Mar 05 2018 Jan Chaloupka <jchaloup(a)redhat.com> - 0-0.14.gitc0ef453
+- Update to spec 3.0
+
* Mon Feb 26 2018 Jan Chaloupka <jchaloup(a)redhat.com> - 0-0.13.20140619gitc0ef453
- Autogenerate some parts using the new macros
diff --git a/sources b/sources
index 8f8bf03..182e38d 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-3d640895a47c2d885fba9a2142ac5dd2 go-http-auth-c0ef453.tar.gz
+SHA512 (go-http-auth-c0ef4539dfab4d21c8ef20ba2924f9fc6f186d35.tar.gz) = 0e8c688e3a137aca342b6b1430b2269ba9bb96a5780704e6198036997d26778299fa86213c237c8528e1e4ce802dabe4e2e7f5de2868da30ebe01b7c8752360e
commit 5ee77b70fc9c8f69804a8e61bb51acc348983db5
Author: Jan Chaloupka <jchaloup(a)redhat.com>
Date: Mon Feb 26 10:48:43 2018 +0100
Autogenerate some parts using the new macros
diff --git a/golang-github-abbot-go-http-auth.spec b/golang-github-abbot-go-http-auth.spec
index 4eeed9d..abb8d22 100644
--- a/golang-github-abbot-go-http-auth.spec
+++ b/golang-github-abbot-go-http-auth.spec
@@ -1,161 +1,55 @@
-%if 0%{?fedora} || 0%{?rhel} == 6
-%global with_devel 1
-%global with_bundled 0
-%global with_debug 0
-%global with_check 1
-%global with_unit_test 1
-%else
-%global with_devel 0
-%global with_bundled 0
-%global with_debug 0
-%global with_check 0
-%global with_unit_test 0
-%endif
-
-%if 0%{?with_debug}
-%global _dwz_low_mem_die_limit 0
-%else
-%global debug_package %{nil}
-%endif
-
-%global provider github
-%global provider_tld com
-%global project abbot
-%global repo go-http-auth
# https://github.com/abbot/go-http-auth
-%global provider_prefix %{provider}.%{provider_tld}/%{project}/%{repo}
-%global import_path %{provider_prefix}
+%global provider_prefix github.com/abbot/go-http-auth
+%global gobaseipath %{provider_prefix}
%global commit c0ef4539dfab4d21c8ef20ba2924f9fc6f186d35
-%global shortcommit %(c=%{commit}; echo ${c:0:7})
+%global commitdate 20140619
-Name: golang-%{provider}-%{project}-%{repo}
+%gocraftmeta -i
+
+Name: %{goname}
Version: 0
-Release: 0.12.git%{shortcommit}%{?dist}
+Release: 0.13.%{commitdate}git%{shortcommit}%{?dist}
Summary: Basic and Digest HTTP Authentication for golang http
License: ASL 2.0
-URL: https://%{provider_prefix}
-Source0: https://%{provider_prefix}/archive/%{commit}/%{repo}-%{shortcommit}.tar.gz
-
-# e.g. el6 has ppc64 arch without gcc-go, so EA tag is required
-ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
-# If go_compiler is not set to 1, there is no virtual provide. Use golang instead.
-BuildRequires: %{?go_compiler:compiler(go-compiler)}%{!?go_compiler:golang}
+URL: %{gourl}
+Source0: %{gosource}
%description
This is an implementation of HTTP Basic
and HTTP Digest authentication in Go language.
It is designed as a simple wrapper for http.RequestHandler functions.
-%if 0%{?with_devel}
%package devel
Summary: %{summary}
BuildArch: noarch
-%if 0%{?with_check}
-%endif
-
-Provides: golang(%{import_path}) = %{version}-%{release}
-
%description devel
%{summary}
This package contains library source intended for
building other packages which use import path with
-%{import_path} prefix.
-%endif
-
-%if 0%{?with_unit_test} && 0%{?with_devel}
-%package unit-test
-Summary: Unit tests for %{name} package
-# If go_compiler is not set to 1, there is no virtual provide. Use golang instead.
-BuildRequires: %{?go_compiler:compiler(go-compiler)}%{!?go_compiler:golang}
-
-%if 0%{?with_check}
-#Here comes all BuildRequires: PACKAGE the unit tests
-#in %%check section need for running
-%endif
-
-# test subpackage tests code from devel subpackage
-Requires: %{name}-devel = %{version}-%{release}
-
-%description unit-test
-%{summary}
-
-This package contains unit tests for project
-providing packages with %{import_path} prefix.
-%endif
+%{gobaseipath} prefix.
%prep
-%setup -q -n %{repo}-%{commit}
-
-%build
+%gosetup
%install
-# source codes for building projects
-%if 0%{?with_devel}
-install -d -p %{buildroot}/%{gopath}/src/%{import_path}/
-echo "%%dir %%{gopath}/src/%%{import_path}/." >> devel.file-list
-# find all *.go but no *_test.go files and generate devel.file-list
-for file in $(find . -iname "*.go" \! -iname "*_test.go") ; do
- echo "%%dir %%{gopath}/src/%%{import_path}/$(dirname $file)" >> devel.file-list
- install -d -p %{buildroot}/%{gopath}/src/%{import_path}/$(dirname $file)
- cp -pav $file %{buildroot}/%{gopath}/src/%{import_path}/$file
- echo "%%{gopath}/src/%%{import_path}/$file" >> devel.file-list
-done
-%endif
-
-# testing files for this project
-%if 0%{?with_unit_test} && 0%{?with_devel}
-install -d -p %{buildroot}/%{gopath}/src/%{import_path}/
-# find all *_test.go files and generate unit-test.file-list
-for file in $(find . -iname "*_test.go"); do
- echo "%%dir %%{gopath}/src/%%{import_path}/$(dirname $file)" >> devel.file-list
- install -d -p %{buildroot}/%{gopath}/src/%{import_path}/$(dirname $file)
- cp -pav $file %{buildroot}/%{gopath}/src/%{import_path}/$file
- echo "%%{gopath}/src/%%{import_path}/$file" >> unit-test.file-list
-done
-cp -pav test.htdigest %{buildroot}/%{gopath}/src/%{import_path}/
-echo "%%{gopath}/src/%%{import_path}/test.htdigest" >> unit-test.file-list
-cp -pav test.htpasswd %{buildroot}/%{gopath}/src/%{import_path}/
-echo "%%{gopath}/src/%%{import_path}/test.htpasswd" >> unit-test.file-list
-%endif
-
-%if 0%{?with_devel}
-sort -u -o devel.file-list devel.file-list
-%endif
+%goinstall test.htdigest test.htpasswd
%check
-%if 0%{?with_check} && 0%{?with_unit_test} && 0%{?with_devel}
-%if ! 0%{?with_bundled}
-export GOPATH=%{buildroot}/%{gopath}:%{gopath}
-%else
-export GOPATH=%{buildroot}/%{gopath}:$(pwd)/Godeps/_workspace:%{gopath}
-%endif
-
-%if ! 0%{?gotest:1}
-%global gotest go test
-%endif
-
-%gotest %{import_path}
-%endif
+%gochecks
#define license tag if not already defined
%{!?_licensedir:%global license %doc}
-%if 0%{?with_devel}
%files devel -f devel.file-list
%license LICENSE
%doc README.md
-%dir %{gopath}/src/%{provider}.%{provider_tld}/%{project}
-%endif
-
-%if 0%{?with_unit_test} && 0%{?with_devel}
-%files unit-test -f unit-test.file-list
-%license LICENSE
-%doc README.md
-%endif
%changelog
+* Mon Feb 26 2018 Jan Chaloupka <jchaloup(a)redhat.com> - 0-0.13.20140619gitc0ef453
+- Autogenerate some parts using the new macros
+
* Wed Feb 07 2018 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.12.gitc0ef453
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
@@ -199,5 +93,3 @@ export GOPATH=%{buildroot}/%{gopath}:$(pwd)/Godeps/_workspace:%{gopath}
* Thu Dec 18 2014 jchaloup <jchaloup(a)redhat.com> - 0-0.1.gitc0ef453
- First package for Fedora
resolves: #1175673
-
-
5 years, 11 months
Architecture specific change in rpms/golang-github-abbot-go-http-auth.git
by githook-noreply@fedoraproject.org
The package rpms/golang-github-abbot-go-http-auth.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/golang-github-abbot-go-http-auth.....
Change:
-ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
Thanks.
Full change:
============
commit b394099042239b3586bdc405fea7c2d2f79b3790
Author: Jan Chaloupka <jchaloup(a)redhat.com>
Date: Fri Jun 8 10:46:01 2018 +0200
Upload glide.lock and glide.yaml files
diff --git a/glide.lock b/glide.lock
new file mode 100644
index 0000000..1b573d4
--- /dev/null
+++ b/glide.lock
@@ -0,0 +1,3 @@
+hash: 03526ecd49ce2bac2a3d8daf9f34ef89f7fee05791c0bc03a23534bd93bf1295
+imports: []
+updated: '2018-06-08T08:43:29.517771+00:00'
diff --git a/glide.yaml b/glide.yaml
new file mode 100644
index 0000000..be72de1
--- /dev/null
+++ b/glide.yaml
@@ -0,0 +1,3 @@
+import: []
+package: github.com/abbot/go-http-auth
+
diff --git a/golang-github-abbot-go-http-auth.spec b/golang-github-abbot-go-http-auth.spec
index ad11f62..c809681 100644
--- a/golang-github-abbot-go-http-auth.spec
+++ b/golang-github-abbot-go-http-auth.spec
@@ -6,11 +6,13 @@
Name: golang-github-abbot-go-http-auth
Version: 0
-Release: 0.14%{?dist}
+Release: 0.15%{?dist}
Summary: Basic and Digest HTTP Authentication for golang http
License: ASL 2.0
URL: %{gourl}
Source0: %{gosource}
+Source1: glide.lock
+Source2: glide.yaml
%description
This is an implementation of HTTP Basic
@@ -30,9 +32,10 @@ building other packages which use import path with
%prep
%gosetup
+cp %{SOURCE1} %{SOURCE2} .
%install
-%goinstall test.htdigest test.htpasswd
+%goinstall test.htdigest test.htpasswd glide.lock glide.yaml
%check
%gochecks
@@ -45,6 +48,9 @@ building other packages which use import path with
%doc README.md
%changelog
+* Fri Jun 08 2018 Jan Chaloupka <jchaloup(a)redhat.com> - 0-0.15.gitc0ef453
+- Upload glide.lock and glide.yaml files
+
* Mon Mar 05 2018 Jan Chaloupka <jchaloup(a)redhat.com> - 0-0.14.gitc0ef453
- Update to spec 3.0
commit f5c25593ed95b9750fe669f431d717f432b8da69
Author: Jan Chaloupka <jchaloup(a)redhat.com>
Date: Mon Mar 5 14:36:08 2018 +0100
Fix the package name
diff --git a/golang-github-abbot-go-http-auth.spec b/golang-github-abbot-go-http-auth.spec
index 96e5228..ad11f62 100644
--- a/golang-github-abbot-go-http-auth.spec
+++ b/golang-github-abbot-go-http-auth.spec
@@ -4,7 +4,7 @@
%gometa -i
-Name: %{goname}
+Name: golang-github-abbot-go-http-auth
Version: 0
Release: 0.14%{?dist}
Summary: Basic and Digest HTTP Authentication for golang http
commit 7fdc14a9b450e35c7fa244ea6817c4d119892cb6
Author: Jan Chaloupka <jchaloup(a)redhat.com>
Date: Mon Mar 5 13:04:15 2018 +0100
Update to spec 3.0
diff --git a/.gitignore b/.gitignore
index cbfe4f8..908a251 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-/go-http-auth-c0ef453.tar.gz
+/go-http-auth-c0ef4539dfab4d21c8ef20ba2924f9fc6f186d35.tar.gz
diff --git a/golang-github-abbot-go-http-auth.spec b/golang-github-abbot-go-http-auth.spec
index abb8d22..96e5228 100644
--- a/golang-github-abbot-go-http-auth.spec
+++ b/golang-github-abbot-go-http-auth.spec
@@ -1,14 +1,12 @@
# https://github.com/abbot/go-http-auth
-%global provider_prefix github.com/abbot/go-http-auth
-%global gobaseipath %{provider_prefix}
+%global goipath github.com/abbot/go-http-auth
%global commit c0ef4539dfab4d21c8ef20ba2924f9fc6f186d35
-%global commitdate 20140619
-%gocraftmeta -i
+%gometa -i
Name: %{goname}
Version: 0
-Release: 0.13.%{commitdate}git%{shortcommit}%{?dist}
+Release: 0.14%{?dist}
Summary: Basic and Digest HTTP Authentication for golang http
License: ASL 2.0
URL: %{gourl}
@@ -28,7 +26,7 @@ BuildArch: noarch
This package contains library source intended for
building other packages which use import path with
-%{gobaseipath} prefix.
+%{goipath} prefix.
%prep
%gosetup
@@ -47,6 +45,9 @@ building other packages which use import path with
%doc README.md
%changelog
+* Mon Mar 05 2018 Jan Chaloupka <jchaloup(a)redhat.com> - 0-0.14.gitc0ef453
+- Update to spec 3.0
+
* Mon Feb 26 2018 Jan Chaloupka <jchaloup(a)redhat.com> - 0-0.13.20140619gitc0ef453
- Autogenerate some parts using the new macros
diff --git a/sources b/sources
index 8f8bf03..182e38d 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-3d640895a47c2d885fba9a2142ac5dd2 go-http-auth-c0ef453.tar.gz
+SHA512 (go-http-auth-c0ef4539dfab4d21c8ef20ba2924f9fc6f186d35.tar.gz) = 0e8c688e3a137aca342b6b1430b2269ba9bb96a5780704e6198036997d26778299fa86213c237c8528e1e4ce802dabe4e2e7f5de2868da30ebe01b7c8752360e
commit 5ee77b70fc9c8f69804a8e61bb51acc348983db5
Author: Jan Chaloupka <jchaloup(a)redhat.com>
Date: Mon Feb 26 10:48:43 2018 +0100
Autogenerate some parts using the new macros
diff --git a/golang-github-abbot-go-http-auth.spec b/golang-github-abbot-go-http-auth.spec
index 4eeed9d..abb8d22 100644
--- a/golang-github-abbot-go-http-auth.spec
+++ b/golang-github-abbot-go-http-auth.spec
@@ -1,161 +1,55 @@
-%if 0%{?fedora} || 0%{?rhel} == 6
-%global with_devel 1
-%global with_bundled 0
-%global with_debug 0
-%global with_check 1
-%global with_unit_test 1
-%else
-%global with_devel 0
-%global with_bundled 0
-%global with_debug 0
-%global with_check 0
-%global with_unit_test 0
-%endif
-
-%if 0%{?with_debug}
-%global _dwz_low_mem_die_limit 0
-%else
-%global debug_package %{nil}
-%endif
-
-%global provider github
-%global provider_tld com
-%global project abbot
-%global repo go-http-auth
# https://github.com/abbot/go-http-auth
-%global provider_prefix %{provider}.%{provider_tld}/%{project}/%{repo}
-%global import_path %{provider_prefix}
+%global provider_prefix github.com/abbot/go-http-auth
+%global gobaseipath %{provider_prefix}
%global commit c0ef4539dfab4d21c8ef20ba2924f9fc6f186d35
-%global shortcommit %(c=%{commit}; echo ${c:0:7})
+%global commitdate 20140619
-Name: golang-%{provider}-%{project}-%{repo}
+%gocraftmeta -i
+
+Name: %{goname}
Version: 0
-Release: 0.12.git%{shortcommit}%{?dist}
+Release: 0.13.%{commitdate}git%{shortcommit}%{?dist}
Summary: Basic and Digest HTTP Authentication for golang http
License: ASL 2.0
-URL: https://%{provider_prefix}
-Source0: https://%{provider_prefix}/archive/%{commit}/%{repo}-%{shortcommit}.tar.gz
-
-# e.g. el6 has ppc64 arch without gcc-go, so EA tag is required
-ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
-# If go_compiler is not set to 1, there is no virtual provide. Use golang instead.
-BuildRequires: %{?go_compiler:compiler(go-compiler)}%{!?go_compiler:golang}
+URL: %{gourl}
+Source0: %{gosource}
%description
This is an implementation of HTTP Basic
and HTTP Digest authentication in Go language.
It is designed as a simple wrapper for http.RequestHandler functions.
-%if 0%{?with_devel}
%package devel
Summary: %{summary}
BuildArch: noarch
-%if 0%{?with_check}
-%endif
-
-Provides: golang(%{import_path}) = %{version}-%{release}
-
%description devel
%{summary}
This package contains library source intended for
building other packages which use import path with
-%{import_path} prefix.
-%endif
-
-%if 0%{?with_unit_test} && 0%{?with_devel}
-%package unit-test
-Summary: Unit tests for %{name} package
-# If go_compiler is not set to 1, there is no virtual provide. Use golang instead.
-BuildRequires: %{?go_compiler:compiler(go-compiler)}%{!?go_compiler:golang}
-
-%if 0%{?with_check}
-#Here comes all BuildRequires: PACKAGE the unit tests
-#in %%check section need for running
-%endif
-
-# test subpackage tests code from devel subpackage
-Requires: %{name}-devel = %{version}-%{release}
-
-%description unit-test
-%{summary}
-
-This package contains unit tests for project
-providing packages with %{import_path} prefix.
-%endif
+%{gobaseipath} prefix.
%prep
-%setup -q -n %{repo}-%{commit}
-
-%build
+%gosetup
%install
-# source codes for building projects
-%if 0%{?with_devel}
-install -d -p %{buildroot}/%{gopath}/src/%{import_path}/
-echo "%%dir %%{gopath}/src/%%{import_path}/." >> devel.file-list
-# find all *.go but no *_test.go files and generate devel.file-list
-for file in $(find . -iname "*.go" \! -iname "*_test.go") ; do
- echo "%%dir %%{gopath}/src/%%{import_path}/$(dirname $file)" >> devel.file-list
- install -d -p %{buildroot}/%{gopath}/src/%{import_path}/$(dirname $file)
- cp -pav $file %{buildroot}/%{gopath}/src/%{import_path}/$file
- echo "%%{gopath}/src/%%{import_path}/$file" >> devel.file-list
-done
-%endif
-
-# testing files for this project
-%if 0%{?with_unit_test} && 0%{?with_devel}
-install -d -p %{buildroot}/%{gopath}/src/%{import_path}/
-# find all *_test.go files and generate unit-test.file-list
-for file in $(find . -iname "*_test.go"); do
- echo "%%dir %%{gopath}/src/%%{import_path}/$(dirname $file)" >> devel.file-list
- install -d -p %{buildroot}/%{gopath}/src/%{import_path}/$(dirname $file)
- cp -pav $file %{buildroot}/%{gopath}/src/%{import_path}/$file
- echo "%%{gopath}/src/%%{import_path}/$file" >> unit-test.file-list
-done
-cp -pav test.htdigest %{buildroot}/%{gopath}/src/%{import_path}/
-echo "%%{gopath}/src/%%{import_path}/test.htdigest" >> unit-test.file-list
-cp -pav test.htpasswd %{buildroot}/%{gopath}/src/%{import_path}/
-echo "%%{gopath}/src/%%{import_path}/test.htpasswd" >> unit-test.file-list
-%endif
-
-%if 0%{?with_devel}
-sort -u -o devel.file-list devel.file-list
-%endif
+%goinstall test.htdigest test.htpasswd
%check
-%if 0%{?with_check} && 0%{?with_unit_test} && 0%{?with_devel}
-%if ! 0%{?with_bundled}
-export GOPATH=%{buildroot}/%{gopath}:%{gopath}
-%else
-export GOPATH=%{buildroot}/%{gopath}:$(pwd)/Godeps/_workspace:%{gopath}
-%endif
-
-%if ! 0%{?gotest:1}
-%global gotest go test
-%endif
-
-%gotest %{import_path}
-%endif
+%gochecks
#define license tag if not already defined
%{!?_licensedir:%global license %doc}
-%if 0%{?with_devel}
%files devel -f devel.file-list
%license LICENSE
%doc README.md
-%dir %{gopath}/src/%{provider}.%{provider_tld}/%{project}
-%endif
-
-%if 0%{?with_unit_test} && 0%{?with_devel}
-%files unit-test -f unit-test.file-list
-%license LICENSE
-%doc README.md
-%endif
%changelog
+* Mon Feb 26 2018 Jan Chaloupka <jchaloup(a)redhat.com> - 0-0.13.20140619gitc0ef453
+- Autogenerate some parts using the new macros
+
* Wed Feb 07 2018 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.12.gitc0ef453
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
@@ -199,5 +93,3 @@ export GOPATH=%{buildroot}/%{gopath}:$(pwd)/Godeps/_workspace:%{gopath}
* Thu Dec 18 2014 jchaloup <jchaloup(a)redhat.com> - 0-0.1.gitc0ef453
- First package for Fedora
resolves: #1175673
-
-
commit 7cfb07dc91d90347e3f4079de197532543cdcff3
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Wed Feb 7 13:55:32 2018 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/golang-github-abbot-go-http-auth.spec b/golang-github-abbot-go-http-auth.spec
index 2b51b6d..4eeed9d 100644
--- a/golang-github-abbot-go-http-auth.spec
+++ b/golang-github-abbot-go-http-auth.spec
@@ -30,7 +30,7 @@
Name: golang-%{provider}-%{project}-%{repo}
Version: 0
-Release: 0.11.git%{shortcommit}%{?dist}
+Release: 0.12.git%{shortcommit}%{?dist}
Summary: Basic and Digest HTTP Authentication for golang http
License: ASL 2.0
URL: https://%{provider_prefix}
@@ -156,6 +156,9 @@ export GOPATH=%{buildroot}/%{gopath}:$(pwd)/Godeps/_workspace:%{gopath}
%endif
%changelog
+* Wed Feb 07 2018 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.12.gitc0ef453
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
+
* Wed Aug 02 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.11.gitc0ef453
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
5 years, 11 months
Architecture specific change in rpms/golang-github-3rf-mongo-lint.git
by githook-noreply@fedoraproject.org
The package rpms/golang-github-3rf-mongo-lint.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/golang-github-3rf-mongo-lint.git/....
Change:
-ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
Thanks.
Full change:
============
commit a004cb682df81d67a78eb239dd695672d8d7259f
Author: Jan Chaloupka <jchaloup(a)redhat.com>
Date: Thu Jun 7 14:59:02 2018 +0200
Upload glide.lock and glide.yaml files
diff --git a/glide.lock b/glide.lock
new file mode 100644
index 0000000..c4656cc
--- /dev/null
+++ b/glide.lock
@@ -0,0 +1,3 @@
+hash: 73fd1cb52205ba555ddd408de898955fca3e1f300e596ecab86940d3f1bab78f
+imports: []
+updated: '2018-06-07T12:56:40.071253+00:00'
diff --git a/glide.yaml b/glide.yaml
new file mode 100644
index 0000000..e2e3f1e
--- /dev/null
+++ b/glide.yaml
@@ -0,0 +1,3 @@
+import: []
+package: github.com/3rf/mongo-lint
+
diff --git a/golang-github-3rf-mongo-lint.spec b/golang-github-3rf-mongo-lint.spec
index 90cf111..9e7980b 100644
--- a/golang-github-3rf-mongo-lint.spec
+++ b/golang-github-3rf-mongo-lint.spec
@@ -7,11 +7,13 @@
Name: %{goname}
Version: 0
-Release: 0.12%{?dist}
+Release: 0.13%{?dist}
Summary: MongoDB fork of Golint
License: BSD
URL: %{gourl}
Source0: %{gosource}
+Source1: glide.lock
+Source2: glide.yaml
%description
%{summary}
@@ -29,10 +31,11 @@ building other packages which use import path with
%prep
%forgesetup
+cp %{SOURCE1} %{SOURCE2} .
%install
files="$(find . -name 'testdata' -type d)"
-%goinstall $files
+%goinstall $files glide.lock glide.yaml
%check
%gochecks -d .
@@ -45,6 +48,9 @@ files="$(find . -name 'testdata' -type d)"
%doc README
%changelog
+* Thu Jun 07 2018 Jan Chaloupka <jchaloup(a)redhat.com> - 0-0.13.gitf6cf4f8
+- Upload glide.lock and glide.yaml files
+
* Mon Mar 05 2018 Jan Chaloupka <jchaloup(a)redhat.com> - 0-0.12.gitf6cf4f8
- Update to spec 3.0
commit c05e3121a7d4e81db36c060f172088a845fbc53b
Author: Jan Chaloupka <jchaloup(a)redhat.com>
Date: Mon Mar 5 12:01:34 2018 +0100
Update to spec 3.0
diff --git a/.gitignore b/.gitignore
index 0b4ceea..64c5ff6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-/mongo-lint-f6cf4f8.tar.gz
+/mongo-lint-f6cf4f8a7d07167375b035d186a1e8b3ebf28aa3.tar.gz
diff --git a/golang-github-3rf-mongo-lint.spec b/golang-github-3rf-mongo-lint.spec
index 349d60e..90cf111 100644
--- a/golang-github-3rf-mongo-lint.spec
+++ b/golang-github-3rf-mongo-lint.spec
@@ -1,15 +1,13 @@
# https://github.com/3rf/mongo-lint
-%global provider_prefix github.com/3rf/mongo-lint
-%global gobaseipath %{provider_prefix}
+%global goipath github.com/3rf/mongo-lint
%global commit f6cf4f8a7d07167375b035d186a1e8b3ebf28aa3
-%global commitdate 20140702
-%global __go_ignore_regex /testdata
+%global goignoreflags -r /testdata
-%gocraftmeta -i
+%gometa -i
Name: %{goname}
Version: 0
-Release: 0.11.%{commitdate}git%{shortcommit}%{?dist}
+Release: 0.12%{?dist}
Summary: MongoDB fork of Golint
License: BSD
URL: %{gourl}
@@ -27,16 +25,17 @@ BuildArch: noarch
This package contains library source intended for
building other packages which use import path with
-%{gobaseipath} prefix.
+%{goipath} prefix.
%prep
-%gosetup
+%forgesetup
%install
-%goinstall $(find . -name "testdata" -type d)
+files="$(find . -name 'testdata' -type d)"
+%goinstall $files
%check
-%gochecks %{gobaseipath}
+%gochecks -d .
#define license tag if not already defined
%{!?_licensedir:%global license %doc}
@@ -46,6 +45,9 @@ building other packages which use import path with
%doc README
%changelog
+* Mon Mar 05 2018 Jan Chaloupka <jchaloup(a)redhat.com> - 0-0.12.gitf6cf4f8
+- Update to spec 3.0
+
* Mon Feb 26 2018 Jan Chaloupka <jchaloup(a)redhat.com> - 0-0.11.20140702gitf6cf4f8
- Autogenerate some parts using the new macros
diff --git a/sources b/sources
index c0ef856..d7c0823 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-35baa4bfd2ea4610fe8227ad0e443067 mongo-lint-f6cf4f8.tar.gz
+SHA512 (mongo-lint-f6cf4f8a7d07167375b035d186a1e8b3ebf28aa3.tar.gz) = de6bd8d1874975bdced7a1bad4392e107cd05676b1b6b89c68d0a41b7d8b0d3bc963b57674215f65130516175ea9b82bea7ef6960dae6408dfafa80aef4d69c1
commit 457ad9f8448d347db94ab565c1e47054d3495dcc
Author: Jan Chaloupka <jchaloup(a)redhat.com>
Date: Mon Feb 26 10:43:30 2018 +0100
Autogenerate some parts using the new macros
diff --git a/golang-github-3rf-mongo-lint.spec b/golang-github-3rf-mongo-lint.spec
index a31bffa..349d60e 100644
--- a/golang-github-3rf-mongo-lint.spec
+++ b/golang-github-3rf-mongo-lint.spec
@@ -1,152 +1,54 @@
-%if 0%{?fedora} || 0%{?rhel} == 6
-%global with_devel 1
-%global with_bundled 0
-%global with_debug 0
-# Some tests are failing and upsteam has no commits with fixes
-%global with_check 0
-%global with_unit_test 1
-%else
-%global with_devel 1
-%global with_bundled 0
-%global with_debug 0
-%global with_check 0
-%global with_unit_test 1
-%endif
-
-%if 0%{?with_debug}
-%global _dwz_low_mem_die_limit 0
-%else
-%global debug_package %{nil}
-%endif
-
-%global provider github
-%global provider_tld com
-%global project 3rf
-%global repo mongo-lint
# https://github.com/3rf/mongo-lint
-%global provider_prefix %{provider}.%{provider_tld}/%{project}/%{repo}
-%global import_path %{provider_prefix}
+%global provider_prefix github.com/3rf/mongo-lint
+%global gobaseipath %{provider_prefix}
%global commit f6cf4f8a7d07167375b035d186a1e8b3ebf28aa3
-%global shortcommit %(c=%{commit}; echo ${c:0:7})
+%global commitdate 20140702
+%global __go_ignore_regex /testdata
-Name: golang-%{provider}-%{project}-%{repo}
+%gocraftmeta -i
+
+Name: %{goname}
Version: 0
-Release: 0.10.git%{shortcommit}%{?dist}
+Release: 0.11.%{commitdate}git%{shortcommit}%{?dist}
Summary: MongoDB fork of Golint
License: BSD
-URL: https://%{provider_prefix}
-Source0: https://%{provider_prefix}/archive/%{commit}/%{repo}-%{shortcommit}.tar.gz
-
-# e.g. el6 has ppc64 arch without gcc-go, so EA tag is required
-ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
-# If go_compiler is not set to 1, there is no virtual provide. Use golang instead.
-BuildRequires: %{?go_compiler:compiler(go-compiler)}%{!?go_compiler:golang}
+URL: %{gourl}
+Source0: %{gosource}
%description
%{summary}
-%if 0%{?with_devel}
%package devel
Summary: %{summary}
BuildArch: noarch
-%if 0%{?with_check} && ! 0%{?with_bundled}
-%endif
-
-Provides: golang(%{import_path}) = %{version}-%{release}
-
%description devel
%{summary}
This package contains library source intended for
building other packages which use import path with
-%{import_path} prefix.
-%endif
-
-%if 0%{?with_unit_test} && 0%{?with_devel}
-%package unit-test-devel
-Summary: Unit tests for %{name} package
-%if 0%{?with_check}
-#Here comes all BuildRequires: PACKAGE the unit tests
-#in %%check section need for running
-%endif
-
-# test subpackage tests code from devel subpackage
-Requires: %{name}-devel = %{version}-%{release}
-
-%description unit-test-devel
-%{summary}
-
-This package contains unit tests for project
-providing packages with %{import_path} prefix.
-%endif
+%{gobaseipath} prefix.
%prep
-%setup -q -n %{repo}-%{commit}
-
-%build
+%gosetup
%install
-# source codes for building projects
-%if 0%{?with_devel}
-install -d -p %{buildroot}/%{gopath}/src/%{import_path}/
-echo "%%dir %%{gopath}/src/%%{import_path}/." >> devel.file-list
-# find all *.go but no *_test.go files and generate devel.file-list
-for file in $(find . -iname "*.go" \! -iname "*_test.go" | grep -v "./testdata") ; do
- echo "%%dir %%{gopath}/src/%%{import_path}/$(dirname $file)" >> devel.file-list
- install -d -p %{buildroot}/%{gopath}/src/%{import_path}/$(dirname $file)
- cp -pav $file %{buildroot}/%{gopath}/src/%{import_path}/$file
- echo "%%{gopath}/src/%%{import_path}/$file" >> devel.file-list
-done
-%endif
-
-# testing files for this project
-%if 0%{?with_unit_test} && 0%{?with_devel}
-install -d -p %{buildroot}/%{gopath}/src/%{import_path}/
-# find all *_test.go files and generate unit-test.file-list
-for file in $(find . -iname "*_test.go"); do
- echo "%%dir %%{gopath}/src/%%{import_path}/$(dirname $file)" >> devel.file-list
- install -d -p %{buildroot}/%{gopath}/src/%{import_path}/$(dirname $file)
- cp -pav $file %{buildroot}/%{gopath}/src/%{import_path}/$file
- echo "%%{gopath}/src/%%{import_path}/$file" >> unit-test-devel.file-list
-done
-cp -r testdata %{buildroot}/%{gopath}/src/%{import_path}/.
-echo "%%{gopath}/src/%%{import_path}/testdata" >> unit-test-devel.file-list
-%endif
-
-%if 0%{?with_devel}
-sort -u -o devel.file-list devel.file-list
-%endif
+%goinstall $(find . -name "testdata" -type d)
%check
-%if 0%{?with_check} && 0%{?with_unit_test} && 0%{?with_devel}
-%if ! 0%{?with_bundled}
-export GOPATH=%{buildroot}/%{gopath}:%{gopath}
-%else
-export GOPATH=%{buildroot}/%{gopath}:$(pwd)/Godeps/_workspace:%{gopath}
-%endif
-
-%gotest %{import_path}
-%gotest %{import_path}/testdata
-%endif
+%gochecks %{gobaseipath}
#define license tag if not already defined
%{!?_licensedir:%global license %doc}
-%if 0%{?with_devel}
%files devel -f devel.file-list
%license LICENSE
%doc README
-%dir %{gopath}/src/%{provider}.%{provider_tld}/%{project}
-%endif
-
-%if 0%{?with_unit_test} && 0%{?with_devel}
-%files unit-test-devel -f unit-test-devel.file-list
-%license LICENSE
-%doc README
-%endif
%changelog
+* Mon Feb 26 2018 Jan Chaloupka <jchaloup(a)redhat.com> - 0-0.11.20140702gitf6cf4f8
+- Autogenerate some parts using the new macros
+
* Wed Feb 07 2018 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.10.gitf6cf4f8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
5 years, 11 months
Architecture specific change in rpms/golang-github-3rf-mongo-lint.git
by githook-noreply@fedoraproject.org
The package rpms/golang-github-3rf-mongo-lint.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/golang-github-3rf-mongo-lint.git/....
Change:
-ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
Thanks.
Full change:
============
commit a004cb682df81d67a78eb239dd695672d8d7259f
Author: Jan Chaloupka <jchaloup(a)redhat.com>
Date: Thu Jun 7 14:59:02 2018 +0200
Upload glide.lock and glide.yaml files
diff --git a/glide.lock b/glide.lock
new file mode 100644
index 0000000..c4656cc
--- /dev/null
+++ b/glide.lock
@@ -0,0 +1,3 @@
+hash: 73fd1cb52205ba555ddd408de898955fca3e1f300e596ecab86940d3f1bab78f
+imports: []
+updated: '2018-06-07T12:56:40.071253+00:00'
diff --git a/glide.yaml b/glide.yaml
new file mode 100644
index 0000000..e2e3f1e
--- /dev/null
+++ b/glide.yaml
@@ -0,0 +1,3 @@
+import: []
+package: github.com/3rf/mongo-lint
+
diff --git a/golang-github-3rf-mongo-lint.spec b/golang-github-3rf-mongo-lint.spec
index 90cf111..9e7980b 100644
--- a/golang-github-3rf-mongo-lint.spec
+++ b/golang-github-3rf-mongo-lint.spec
@@ -7,11 +7,13 @@
Name: %{goname}
Version: 0
-Release: 0.12%{?dist}
+Release: 0.13%{?dist}
Summary: MongoDB fork of Golint
License: BSD
URL: %{gourl}
Source0: %{gosource}
+Source1: glide.lock
+Source2: glide.yaml
%description
%{summary}
@@ -29,10 +31,11 @@ building other packages which use import path with
%prep
%forgesetup
+cp %{SOURCE1} %{SOURCE2} .
%install
files="$(find . -name 'testdata' -type d)"
-%goinstall $files
+%goinstall $files glide.lock glide.yaml
%check
%gochecks -d .
@@ -45,6 +48,9 @@ files="$(find . -name 'testdata' -type d)"
%doc README
%changelog
+* Thu Jun 07 2018 Jan Chaloupka <jchaloup(a)redhat.com> - 0-0.13.gitf6cf4f8
+- Upload glide.lock and glide.yaml files
+
* Mon Mar 05 2018 Jan Chaloupka <jchaloup(a)redhat.com> - 0-0.12.gitf6cf4f8
- Update to spec 3.0
commit c05e3121a7d4e81db36c060f172088a845fbc53b
Author: Jan Chaloupka <jchaloup(a)redhat.com>
Date: Mon Mar 5 12:01:34 2018 +0100
Update to spec 3.0
diff --git a/.gitignore b/.gitignore
index 0b4ceea..64c5ff6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-/mongo-lint-f6cf4f8.tar.gz
+/mongo-lint-f6cf4f8a7d07167375b035d186a1e8b3ebf28aa3.tar.gz
diff --git a/golang-github-3rf-mongo-lint.spec b/golang-github-3rf-mongo-lint.spec
index 349d60e..90cf111 100644
--- a/golang-github-3rf-mongo-lint.spec
+++ b/golang-github-3rf-mongo-lint.spec
@@ -1,15 +1,13 @@
# https://github.com/3rf/mongo-lint
-%global provider_prefix github.com/3rf/mongo-lint
-%global gobaseipath %{provider_prefix}
+%global goipath github.com/3rf/mongo-lint
%global commit f6cf4f8a7d07167375b035d186a1e8b3ebf28aa3
-%global commitdate 20140702
-%global __go_ignore_regex /testdata
+%global goignoreflags -r /testdata
-%gocraftmeta -i
+%gometa -i
Name: %{goname}
Version: 0
-Release: 0.11.%{commitdate}git%{shortcommit}%{?dist}
+Release: 0.12%{?dist}
Summary: MongoDB fork of Golint
License: BSD
URL: %{gourl}
@@ -27,16 +25,17 @@ BuildArch: noarch
This package contains library source intended for
building other packages which use import path with
-%{gobaseipath} prefix.
+%{goipath} prefix.
%prep
-%gosetup
+%forgesetup
%install
-%goinstall $(find . -name "testdata" -type d)
+files="$(find . -name 'testdata' -type d)"
+%goinstall $files
%check
-%gochecks %{gobaseipath}
+%gochecks -d .
#define license tag if not already defined
%{!?_licensedir:%global license %doc}
@@ -46,6 +45,9 @@ building other packages which use import path with
%doc README
%changelog
+* Mon Mar 05 2018 Jan Chaloupka <jchaloup(a)redhat.com> - 0-0.12.gitf6cf4f8
+- Update to spec 3.0
+
* Mon Feb 26 2018 Jan Chaloupka <jchaloup(a)redhat.com> - 0-0.11.20140702gitf6cf4f8
- Autogenerate some parts using the new macros
diff --git a/sources b/sources
index c0ef856..d7c0823 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-35baa4bfd2ea4610fe8227ad0e443067 mongo-lint-f6cf4f8.tar.gz
+SHA512 (mongo-lint-f6cf4f8a7d07167375b035d186a1e8b3ebf28aa3.tar.gz) = de6bd8d1874975bdced7a1bad4392e107cd05676b1b6b89c68d0a41b7d8b0d3bc963b57674215f65130516175ea9b82bea7ef6960dae6408dfafa80aef4d69c1
commit 457ad9f8448d347db94ab565c1e47054d3495dcc
Author: Jan Chaloupka <jchaloup(a)redhat.com>
Date: Mon Feb 26 10:43:30 2018 +0100
Autogenerate some parts using the new macros
diff --git a/golang-github-3rf-mongo-lint.spec b/golang-github-3rf-mongo-lint.spec
index a31bffa..349d60e 100644
--- a/golang-github-3rf-mongo-lint.spec
+++ b/golang-github-3rf-mongo-lint.spec
@@ -1,152 +1,54 @@
-%if 0%{?fedora} || 0%{?rhel} == 6
-%global with_devel 1
-%global with_bundled 0
-%global with_debug 0
-# Some tests are failing and upsteam has no commits with fixes
-%global with_check 0
-%global with_unit_test 1
-%else
-%global with_devel 1
-%global with_bundled 0
-%global with_debug 0
-%global with_check 0
-%global with_unit_test 1
-%endif
-
-%if 0%{?with_debug}
-%global _dwz_low_mem_die_limit 0
-%else
-%global debug_package %{nil}
-%endif
-
-%global provider github
-%global provider_tld com
-%global project 3rf
-%global repo mongo-lint
# https://github.com/3rf/mongo-lint
-%global provider_prefix %{provider}.%{provider_tld}/%{project}/%{repo}
-%global import_path %{provider_prefix}
+%global provider_prefix github.com/3rf/mongo-lint
+%global gobaseipath %{provider_prefix}
%global commit f6cf4f8a7d07167375b035d186a1e8b3ebf28aa3
-%global shortcommit %(c=%{commit}; echo ${c:0:7})
+%global commitdate 20140702
+%global __go_ignore_regex /testdata
-Name: golang-%{provider}-%{project}-%{repo}
+%gocraftmeta -i
+
+Name: %{goname}
Version: 0
-Release: 0.10.git%{shortcommit}%{?dist}
+Release: 0.11.%{commitdate}git%{shortcommit}%{?dist}
Summary: MongoDB fork of Golint
License: BSD
-URL: https://%{provider_prefix}
-Source0: https://%{provider_prefix}/archive/%{commit}/%{repo}-%{shortcommit}.tar.gz
-
-# e.g. el6 has ppc64 arch without gcc-go, so EA tag is required
-ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
-# If go_compiler is not set to 1, there is no virtual provide. Use golang instead.
-BuildRequires: %{?go_compiler:compiler(go-compiler)}%{!?go_compiler:golang}
+URL: %{gourl}
+Source0: %{gosource}
%description
%{summary}
-%if 0%{?with_devel}
%package devel
Summary: %{summary}
BuildArch: noarch
-%if 0%{?with_check} && ! 0%{?with_bundled}
-%endif
-
-Provides: golang(%{import_path}) = %{version}-%{release}
-
%description devel
%{summary}
This package contains library source intended for
building other packages which use import path with
-%{import_path} prefix.
-%endif
-
-%if 0%{?with_unit_test} && 0%{?with_devel}
-%package unit-test-devel
-Summary: Unit tests for %{name} package
-%if 0%{?with_check}
-#Here comes all BuildRequires: PACKAGE the unit tests
-#in %%check section need for running
-%endif
-
-# test subpackage tests code from devel subpackage
-Requires: %{name}-devel = %{version}-%{release}
-
-%description unit-test-devel
-%{summary}
-
-This package contains unit tests for project
-providing packages with %{import_path} prefix.
-%endif
+%{gobaseipath} prefix.
%prep
-%setup -q -n %{repo}-%{commit}
-
-%build
+%gosetup
%install
-# source codes for building projects
-%if 0%{?with_devel}
-install -d -p %{buildroot}/%{gopath}/src/%{import_path}/
-echo "%%dir %%{gopath}/src/%%{import_path}/." >> devel.file-list
-# find all *.go but no *_test.go files and generate devel.file-list
-for file in $(find . -iname "*.go" \! -iname "*_test.go" | grep -v "./testdata") ; do
- echo "%%dir %%{gopath}/src/%%{import_path}/$(dirname $file)" >> devel.file-list
- install -d -p %{buildroot}/%{gopath}/src/%{import_path}/$(dirname $file)
- cp -pav $file %{buildroot}/%{gopath}/src/%{import_path}/$file
- echo "%%{gopath}/src/%%{import_path}/$file" >> devel.file-list
-done
-%endif
-
-# testing files for this project
-%if 0%{?with_unit_test} && 0%{?with_devel}
-install -d -p %{buildroot}/%{gopath}/src/%{import_path}/
-# find all *_test.go files and generate unit-test.file-list
-for file in $(find . -iname "*_test.go"); do
- echo "%%dir %%{gopath}/src/%%{import_path}/$(dirname $file)" >> devel.file-list
- install -d -p %{buildroot}/%{gopath}/src/%{import_path}/$(dirname $file)
- cp -pav $file %{buildroot}/%{gopath}/src/%{import_path}/$file
- echo "%%{gopath}/src/%%{import_path}/$file" >> unit-test-devel.file-list
-done
-cp -r testdata %{buildroot}/%{gopath}/src/%{import_path}/.
-echo "%%{gopath}/src/%%{import_path}/testdata" >> unit-test-devel.file-list
-%endif
-
-%if 0%{?with_devel}
-sort -u -o devel.file-list devel.file-list
-%endif
+%goinstall $(find . -name "testdata" -type d)
%check
-%if 0%{?with_check} && 0%{?with_unit_test} && 0%{?with_devel}
-%if ! 0%{?with_bundled}
-export GOPATH=%{buildroot}/%{gopath}:%{gopath}
-%else
-export GOPATH=%{buildroot}/%{gopath}:$(pwd)/Godeps/_workspace:%{gopath}
-%endif
-
-%gotest %{import_path}
-%gotest %{import_path}/testdata
-%endif
+%gochecks %{gobaseipath}
#define license tag if not already defined
%{!?_licensedir:%global license %doc}
-%if 0%{?with_devel}
%files devel -f devel.file-list
%license LICENSE
%doc README
-%dir %{gopath}/src/%{provider}.%{provider_tld}/%{project}
-%endif
-
-%if 0%{?with_unit_test} && 0%{?with_devel}
-%files unit-test-devel -f unit-test-devel.file-list
-%license LICENSE
-%doc README
-%endif
%changelog
+* Mon Feb 26 2018 Jan Chaloupka <jchaloup(a)redhat.com> - 0-0.11.20140702gitf6cf4f8
+- Autogenerate some parts using the new macros
+
* Wed Feb 07 2018 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.10.gitf6cf4f8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
commit 5668b49299ed5a39dcadee74b12b96d9662b2d6a
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Wed Feb 7 13:50:04 2018 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/golang-github-3rf-mongo-lint.spec b/golang-github-3rf-mongo-lint.spec
index 8686414..a31bffa 100644
--- a/golang-github-3rf-mongo-lint.spec
+++ b/golang-github-3rf-mongo-lint.spec
@@ -31,7 +31,7 @@
Name: golang-%{provider}-%{project}-%{repo}
Version: 0
-Release: 0.9.git%{shortcommit}%{?dist}
+Release: 0.10.git%{shortcommit}%{?dist}
Summary: MongoDB fork of Golint
License: BSD
URL: https://%{provider_prefix}
@@ -147,6 +147,9 @@ export GOPATH=%{buildroot}/%{gopath}:$(pwd)/Godeps/_workspace:%{gopath}
%endif
%changelog
+* Wed Feb 07 2018 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.10.gitf6cf4f8
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
+
* Wed Aug 02 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.9.gitf6cf4f8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
5 years, 11 months
[Report] Packages Restricting Arches
by root
Package no longer excluding arches (2)
==================================
- golang-github-gdamore-encoding
- golang-github-gdamore-tcell
List of packages currently excluding arches (2636)
===========================================
- 0ad
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- 90-Second-Portraits
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64 ppc64
- GtkAda
ExclusiveArch: %{GPRbuild_arches}
- GtkAda3
ExclusiveArch: %{GPRbuild_arches}
- LuxRender
ExclusiveArch: x86_64
- OpenTK
ExclusiveArch: %mono_arches
- PragmARC
ExclusiveArch: %{GPRbuild_arches}
- R-DynDoc
ExclusiveArch: armv7, ppc, go_arch
- RdRand
ExclusiveArch: %{ix86} x86_64
- SLOF
ExclusiveArch: ppc64le
- YafaRay
ExclusiveArch: %{ix86} x86_64
- aboot
ExclusiveArch: alpha
- acpid
ExclusiveArch: ia64 x86_64 %{ix86} %{arm} aarch64
- ahven
ExclusiveArch: %{GPRbuild_arches}
- alleyoop
ExclusiveArch: %{ix86} x86_64 ppc ppc64 ppc64le s390x %{arm} aarch64
- american-fuzzy-lop
ExclusiveArch: %{ix86} x86_64
- anet
ExclusiveArch: %{GPRbuild_arches}
- apmd
ExclusiveArch: %{ix86}
- apmud
ExclusiveArch: ppc
- appstream-generator
ExclusiveArch: x86_64 %{ix86} %{arm}
- arduino
ExclusiveArch: %{go_arches}
- arduino-builder
ExclusiveArch: %{go_arches}
- arm-boot-config
ExclusiveArch: %{arm}
- arm-trusted-firmware
ExclusiveArch: aarch64
- atomic
ExclusiveArch: %{go_arches}
- aunit
ExclusiveArch: %GPRbuild_arches
- avgtime
ExclusiveArch: %{ldc_arches}
- aws
ExclusiveArch: %GPRbuild_arches
- banshee
ExclusiveArch: %{mono_arches}
- banshee-community-extensions
ExclusiveArch: %ix86 x86_64 ppc ppc64 ia64 %{arm} sparcv9 alpha s390x
- bareftp
ExclusiveArch: %{mono_arches}
- bcal
ExclusiveArch: x86_64 aarch64 ia64 ppc64 ppc64le s390x
- bcc
ExclusiveArch: x86_64 %{power64}
- bcm283x-firmware
ExclusiveArch: %{arm} aarch64
- beignet
ExclusiveArch: x86_64 %{ix86}
- berusky2
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 %{mips}
- biosdevname
ExclusiveArch: %{ix86} x86_64
- bless
ExclusiveArch: %mono_arches
- boo
ExclusiveArch: %{mono_arches}
- buildah
ExclusiveArch: x86_64 %{arm} aarch64 ppc64le s390x
- bwa
ExclusiveArch: x86_64
- caddy
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm} aarch64 ppc64le s390x %{mips}}
- cadvisor
ExclusiveArch: %{ix86} x86_64 aarch64 ppc64le
- calamares
ExclusiveArch: %{ix86} x86_64
- carto
ExclusiveArch: %{nodejs_arches} noarch
- ccdciel
ExclusiveArch: %{fpc_arches}
- cdcollect
ExclusiveArch: %{mono_arches}
- ceph
ExclusiveArch: x86_64 aarch64 ppc64 ppc64le
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- chromium
ExclusiveArch: x86_64 i686
ExclusiveArch: x86_64 i686 aarch64
- cjdns
ExclusiveArch: %{nodejs_arches}
- cmospwd
ExclusiveArch: %{ix86} x86_64
- cmrt
ExclusiveArch: %{ix86} x86_64 ia64
- coffee-script
ExclusiveArch: %{nodejs_arches} noarch
- colorful
ExclusiveArch: %{fpc_arches}
- compat-gcc-296
ExclusiveArch: %{ix86} ia64 ppc
- consul
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- containerd
ExclusiveArch: %{go_arches}
- cpuid
ExclusiveArch: %{ix86} x86_64
- cqrlog
ExclusiveArch: %{fpc_arches}
- crash
ExclusiveArch: %{ix86} ia64 x86_64 ppc ppc64 s390 s390x %{arm} aarch64 ppc64le
- cri-tools
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- criu
ExclusiveArch: x86_64 %{arm} ppc64le aarch64 s390x
- cryptlib
ExclusiveArch: x86_64 %{ix86} aarch64 ppc64 ppc64le
- cryptobone
ExclusiveArch: x86_64 %{ix86} ppc64 ppc64le aarch64
- daq
ExclusiveArch: x86_64 aarch64
- darktable
ExclusiveArch: x86_64 aarch64
- dbus-sharp
ExclusiveArch: %mono_arches
- dbus-sharp-glib
ExclusiveArch: %mono_arches
- dbxtool
ExclusiveArch: i386 x86_64 aarch64
- deepin-api
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- deepin-daemon
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- deepin-dbus-generator
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- deepin-gir-generator
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- derelict
ExclusiveArch: %{ldc_arches}
- direnv
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- dlm
ExclusiveArch: i686 x86_64
- dmidecode
ExclusiveArch: %{ix86} x86_64 ia64 aarch64
- dmtcp
ExclusiveArch: %ix86 x86_64 aarch64
- docco
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- docker
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x %{mips}
- docker-anaconda-addon
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x %{mips}
- docker-distribution
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- docker-latest
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x %{mips}
- dolphin-emu
ExclusiveArch: x86_64 armv7l aarch64
- douceur
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- dpdk
ExclusiveArch: x86_64 i686 aarch64 ppc64le
- dssi-vst
ExclusiveArch: %{ix86} x86_64
- dustmite
ExclusiveArch: %{ldc_arches}
- dyninst
ExclusiveArch: %{ix86} x86_64 ppc ppc64
- e3
ExclusiveArch: %{ix86} x86_64
- edac-utils
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 %{power64}
- edb
ExclusiveArch: %{ix86} x86_64
- edk2
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
ExclusiveArch: x86_64 aarch64
- efibootmgr
ExclusiveArch: %{efi}
- efivar
ExclusiveArch: %{efi}
- elasticdump
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- elk
ExclusiveArch: x86_64 %{ix86}
ExclusiveArch: x86_64 %{ix86} aarch64 %{arm} %{power64}
- embree
ExclusiveArch: x86_64
- embree2
ExclusiveArch: x86_64
- envytools
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- exciting
ExclusiveArch: x86_64 %{ix86}
ExclusiveArch: x86_64 %{ix86} aarch64 %{power64}
ExclusiveArch: x86_64 %{ix86} aarch64 %{arm} %{power64}
- exercism
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- expresso
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- extlinux-bootloader
ExclusiveArch: %{arm} aarch64
- fcitx-libpinyin
ExclusiveArch: %{qt5_qtwebengine_arches}
- fedora-developer-portal
ExclusiveArch: ix86 x86_64
- fedora-dockerfiles
ExclusiveArch: %{go_arches}
- fedora-gnat-project-common
ExclusiveArch: noarch %{GNAT_arches}
- fence-virt
ExclusiveArch: i686 x86_64
- fes
ExclusiveArch: x86_64
- flannel
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- florist
ExclusiveArch: %{GPRbuild_arches}
- fluxcapacitor
ExclusiveArch: %{ix86} x86_64 %{arm}
- fpc
ExclusiveArch: %{arm} %{ix86} x86_64 ppc ppc64
- freshmaker
ExclusiveArch: %{ix86} x86_64
- frysk
ExclusiveArch: %{ix86} x86_64 ppc64
- fst
ExclusiveArch: i686
- fwts
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 s390x %{power64}
- fwupdate
ExclusiveArch: %{efi}
- fzf
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- ga
ExclusiveArch: %{ix86} x86_64
- gbrainy
ExclusiveArch: %mono_arches
- gdata-sharp
ExclusiveArch: %mono_arches
- gdb-exploitable
ExclusiveArch: x86_64 i386
ExclusiveArch: x86_64 noarch
- gela-asis
ExclusiveArch: %GPRbuild_arches
- ghc-fgl
ExclusiveArch: %{ghc_arches}
- ghdl
ExclusiveArch: %{GNAT_arches}
- gio-sharp
ExclusiveArch: %mono_arches
- gir-to-d
ExclusiveArch: %{ldc_arches}
- git-lfs
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm} aarch64 ppc64le s390x}
- git-octopus
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- giver
ExclusiveArch: %{mono_arches}
- gkeyfile-sharp
ExclusiveArch: %mono_arches
- gl3n
ExclusiveArch: %{ldc_arches}
- glibc32
ExclusiveArch: x86_64 ppc64 s390x
- glusterd2
ExclusiveArch: %{go_arches}
- gmqcc
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- gnatcoll
ExclusiveArch: %GPRbuild_arches
- gnome-boxes
ExclusiveArch: x86_64
- gnome-desktop-sharp
ExclusiveArch: %mono_arches
- gnome-do
ExclusiveArch: %mono_arches
- gnome-guitar
ExclusiveArch: %{mono_arches}
- gnome-keyring-sharp
ExclusiveArch: %mono_arches
- gnome-rdp
ExclusiveArch: %{mono_arches}
- gnome-sharp
ExclusiveArch: %mono_arches
- gnome-subtitles
ExclusiveArch: %mono_arches
- gnu-efi
ExclusiveArch: %{efi}
- gnu-smalltalk
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le
- go-bindata
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- go-compilers
ExclusiveArch: %{go_arches}
- go-i18n
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- gocomplete
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- godep
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- godotenv
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- gofed
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x %{mips}
- golang
ExclusiveArch: %{golang_arches}
- golang-bitbucket-kardianos-osext
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-deepin-dbus-factory
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-deepin-go-lib
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-10gen-openssl
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- golang-github-AudriusButkevicius-cli
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-AudriusButkevicius-go-nat-pmp
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-AudriusButkevicius-kcp-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-AudriusButkevicius-pfilter
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-BurntSushi-freetype-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-BurntSushi-graphics-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-BurntSushi-toml-test
ExclusiveArch: %{go_arches}
- golang-github-BurntSushi-xgb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-BurntSushi-xgbutil
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-Jeffail-gabs
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-PuerkitoBio-goquery
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-PuerkitoBio-purell
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-PuerkitoBio-urlesc
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-RangelReale-osin
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-RangelReale-osincli
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-SAP-go-hdb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-SeanDolphin-bqschema
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-SermoDigital-jose
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-Shopify-sarama
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-Shopify-toxiproxy
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-ThomsonReutersEikon-go-ntlm
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-alecthomas-assert
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-alecthomas-chroma
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-alecthomas-colour
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-alecthomas-kingpin
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-alecthomas-repr
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-alecthomas-template
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-alecthomas-units
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-andybalholm-cascadia
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-appc-spec
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-armon-go-metrics
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-armon-go-proxyproto
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-asaskevich-govalidator
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-auth0-go-jwt-middleware
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-axgle-mahonia
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-bep-gitmap
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-bep-inflect
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-bgentry-go-netrc
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-bkaradzic-go-lz4
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-boombuler-barcode
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-buger-jsonparser
ExclusiveArch: %{go_arches} noarch
- golang-github-calmh-du
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-calmh-luhn
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-calmh-xdr
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-ccding-go-stun
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cespare-xxhash
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-chaseadamsio-goorgeous
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cheekybits-is
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-chmduquesne-rollinghash
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-chrismalek-oktasdk-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-client9-gospell
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cloudfoundry-incubator-candiedyaml
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cockroachdb-cockroach-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-codahale-aesnicheck
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-codegangsta-negroni
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-coreos-go-etcd
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-cryptix-wav
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-cznic-b
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-fileutil
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-golex
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-internal
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-lex
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-lexer
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-lldb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-mathutil
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-ql
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-sortutil
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-strutil
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-zappy
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-d4l3k-messagediff
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-danwakefield-fnmatch
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-dchest-cssmin
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-dchest-siphash
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-denisenkom-go-mssqldb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-disintegration-imaging
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-dlclark-regexp2
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-docker-libkv
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-docopt-docopt-go
ExclusiveArch: %{go_arches}
- golang-github-duosecurity-duo_api_golang
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-edsrzf-mmap-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-eknkc-amber
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-endophage-gotuf
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-fatih-color
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-fatih-structs
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-flynn-go-shlex
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-fortytw2-leaktest
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-fsnotify-fsnotify
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-fsouza-go-dockerclient
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-fullsailor-pkcs7
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-git-lfs-wildmatch
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-glacjay-goini
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-go-errors-errors
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-go-macaron-inject
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-go-mgo-mgo
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-go-tomb-tomb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gobuffalo-envy
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-gobwas-glob
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-gocql-gocql
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-golang-image
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-google-go-cmp
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-google-go-github
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-goraft-raft
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gorilla-css
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-gorilla-sessions
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gosexy-gettext
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hailocab-go-hostpool
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-hashicorp-go-hclog
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-hashicorp-go-plugin
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-hashicorp-go-rootcerts
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-howeyc-fsnotify
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-inconshreveable-go-vhost
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-influxdb-influxdb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-jackpal-gateway
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-jdkato-prose
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-jdkato-syllables
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-jefferai-jsonx
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-justinas-alice
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-kdar-factorlog
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-keybase-go-crypto
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-klauspost-cpuid
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-klauspost-reedsolomon
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-knieriem-markdown
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-kyokomi-emoji
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-linuxdeepin-go-x11-client
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-lpabon-godbc
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-lucasb-eyer-go-colorful
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-markbates-inflect
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mattn-go-colorable
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mattn-go-shellwords
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mgutz-ansi
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mgutz-logxi
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-michaelklishin-rabbit-hole
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-miekg-mmark
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-miekg-pkcs11
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-milochristiansen-axis2
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-milochristiansen-lua
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-minio-sha256-simd
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mistifyio-go-zfs
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-mitchellh-cli
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mitchellh-copystructure
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mitchellh-go-homedir
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-mitchellh-go-testing-interface
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mitchellh-go-wordwrap
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mitchellh-goamz
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-mitchellh-mapstructure
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mitchellh-reflectwalk
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-montanaflynn-stats
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mreiferson-go-httpclient
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-msteinert-pam
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-muesli-smartcrop
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mvo5-goconfigparser
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-mvo5-uboot-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-mxk-go-flowrate
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-ncw-swift
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-neurosnap-sentences
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-nfnt-resize
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-noahdesu-go-ceph
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-ojii-gettext.go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-olekukonko-tablewriter
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-olekukonko-ts
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-olivere-elastic
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-onsi-ginkgo
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-onsi-gomega
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-opencontainers-runtime-spec
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-opencontainers-specs
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-openshift-go-json-rest
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-openshift-go-systemd
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-openshift-openshift-sdn
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-oschwald-geoip2-golang
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-oschwald-maxminddb-golang
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-patrickmn-go-cache
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-paulrosania-go-charset
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-pelletier-go-buffruneio
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-petar-GoLLRB
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-peterh-liner
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-petermattis-goid
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-pkg-profile
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-pkg-sftp
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-pmezard-go-difflib
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-pquerna-otp
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-prometheus-common
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-prometheus-prometheus
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-racker-perigee
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-rackspace-gophercloud
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-rakyll-globalconf
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-rakyll-pb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-rakyll-statik
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-rasky-go-xdr
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-rcrowley-go-metrics
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-remeh-sizedwaitgroup
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-remyoudompheng-bigfft
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-ryanuber-columnize
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-ryanuber-go-glob
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-samalba-dockerclient
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-samuel-go-zookeeper
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-sasha-s-go-deadlock
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-seccomp-libseccomp-golang
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-sergi-go-diff
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-sethgrid-pester
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-shiena-ansicolor
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-shogo82148-go-shuffle
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-shurcooL-sanitized_anchor_name
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-skarademir-naturalsort
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-skratchdot-open-golang
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-skynetservices-skydns
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-smartystreets-assertions
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-smartystreets-go-aws-auth
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-smartystreets-goconvey
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-spacejam-loghisto
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-spacemonkeygo-openssl
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm} ppc64le s390x}
- golang-github-spaolacci-murmur3
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-spf13-afero
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-spf13-fsync
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-spf13-nitro
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-sstarcher-go-okta
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-stathat-go
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-stevvooe-resumable
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-streadway-amqp
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-stretchr-objx
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-syndtr-gocapability
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-syndtr-goleveldb
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-syndtr-gosnappy
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-templexxx-cpufeat
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-templexxx-reedsolomon
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-templexxx-xor
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-tent-http-link-go
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-thejerf-suture
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-tjfoc-gmsm
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-tonnerre-golang-pretty
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-urfave-cli
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-vaughan0-go-ini
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-vbatts-tar-split
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-vishvananda-netlink
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} aarch64 x86_64 %{arm}}
- golang-github-vishvananda-netns
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-vitrun-qart
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-vjeantet-asn1-ber
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-vmware-govcloudair
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-wsxiaoys-terminal
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-xeipuuv-gojsonpointer
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-xeipuuv-gojsonreference
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-xeipuuv-gojsonschema
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-xiang90-probing
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-xrash-smetrics
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-xtaci-kcp-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-xtaci-smux
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-yosssi-ace
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-yosssi-gohtml
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-yvasiyarov-go-metrics
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-yvasiyarov-gorelic
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-yvasiyarov-newrelic_platform_go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-zillode-notify
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-googlecode-gcfg
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-googlecode-go-decimal-inf
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-googlecode-go-exp
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-googlecode-log4go
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-googlecode-sqlite
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-googlecode-uuid
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-gopkg-check
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-gopkg-go-check-check
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-gopkg-go-macaroon-macaroon
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-gopkg-retry-v1
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-layeh-gopher-luar
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-torproject-pluggable-transports-goptlib
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golint
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- gomtree
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- gotags
ExclusiveArch: %{go_arches}
- gotun
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
ExclusiveArch: x86_64
- gprbuild
ExclusiveArch: %{GPRbuild_arches} %{bootstrap_arch}
- gprolog
ExclusiveArch: x86_64 %{ix86} ppc alpha
- gsf-sharp
ExclusiveArch: %mono_arches
- gtk-sharp-beans
ExclusiveArch: %mono_arches
- gtk-sharp2
ExclusiveArch: %mono_arches
- gtk-sharp3
ExclusiveArch: %{mono_arches}
- gtkd
ExclusiveArch: %{ldc_arches}
- gudev-sharp
ExclusiveArch: %mono_arches
- hedgewars
ExclusiveArch: %{fpc_arches}
- heketi
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- hsakmt
ExclusiveArch: x86_64 aarch64
- hub
ExclusiveArch: %{go_arches}
- hugo
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- hyena
ExclusiveArch: %{mono_arches}
- hyperscan
ExclusiveArch: x86_64
- hyperv-daemons
ExclusiveArch: i686 x86_64
- icaro
ExclusiveArch: %{ix86} %{arm} x86_64 noarch
- ikarus
ExclusiveArch: %{ix86}
- imvirt
ExclusiveArch: %{ix86} x86_64 ia64
- indistarter
ExclusiveArch: %{fpc_arches}
- infinipath-psm
ExclusiveArch: x86_64
- insect
ExclusiveArch: %{nodejs_arches} noarch
- intel-cmt-cat
ExclusiveArch: x86_64 i686 i586
ExclusiveArch: x86_64 i686 i586
- ioport
ExclusiveArch: %{ix86} x86_64
- ipw2100-firmware
ExclusiveArch: noarch i386 x86_64
- ipw2200-firmware
ExclusiveArch: noarch i386 x86_64
- ispc
ExclusiveArch: %{arm} %{ix86} x86_64
- iucode-tool
ExclusiveArch: %{ix86} x86_64
- iwyu
ExclusiveArch: %{ix86} x86_64
- ixpdimm_sw
ExclusiveArch: x86_64
- jake
ExclusiveArch: %{nodejs_arches} noarch
- jasmine-node
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- java-1.8.0-openjdk-aarch32
ExclusiveArch: %{arm}
- jid
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- josm
ExclusiveArch: %{ix86} x86_64
- julia
ExclusiveArch: %{ix86} x86_64
- keepass
ExclusiveArch: %{mono_arches}
- kernel
ExclusiveArch: %{all_x86} x86_64 ppc64 s390x %{arm} aarch64 ppc64le
- kicad
ExclusiveArch: %{ix86} x86_64 %{arm} ppc64 ppc64le aarch64
- knot-resolver
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- kompose
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 s390x
- kosmtik
ExclusiveArch: %{nodejs_arches} noarch
- kubernetes
ExclusiveArch: x86_64 aarch64 ppc64le s390x %{arm}
- latrace
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 %{power64}
- lazarus
ExclusiveArch: %{fpc_arches}
- ldc
ExclusiveArch: %{ldc_arches}
- libbsr
ExclusiveArch: %{power64}
- libclc
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 %{power64} s390x
- libcxl
ExclusiveArch: %{power64}
- libflatarray
ExclusiveArch: %{ix86} x86_64
- libhfi1
ExclusiveArch: x86_64
- libica
ExclusiveArch: s390 s390x
- libinvm-cim
ExclusiveArch: x86_64
- libinvm-cli
ExclusiveArch: x86_64
- libinvm-i18n
ExclusiveArch: x86_64
- libipt
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{ix86} x86_64
- libjingle
ExclusiveArch: %{ix86} x86_64 %{arm}
- libmfx
ExclusiveArch: %{ix86} x86_64
- libocxl
ExclusiveArch: ppc64le
- libpsm2
ExclusiveArch: x86_64
- libquentier
ExclusiveArch: %{qt5_qtwebengine_arches}
- librtas
ExclusiveArch: ppc %{power64}
- libseccomp
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 mipsel mips64el ppc64 ppc64le s390 s390x
- libservicelog
ExclusiveArch: ppc %{power64}
- libsmbios
ExclusiveArch: x86_64 %{ix86}
- libunwind
ExclusiveArch: %{arm} aarch64 hppa ia64 mips ppc %{power64} %{ix86} x86_64
- libva-intel-hybrid-driver
ExclusiveArch: %{ix86} x86_64 ia64
- libvmi
ExclusiveArch: x86_64
- libvpd
ExclusiveArch: ppc %{power64}
- libxsmm
ExclusiveArch: x86_64
- libzfcphbaapi
ExclusiveArch: s390 s390x
- lldb
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- lodash
ExclusiveArch: %{nodejs_arches} noarch
- log4net
ExclusiveArch: %mono_arches
- lrmi
ExclusiveArch: %{ix86}
- lsvpd
ExclusiveArch: ppc %{power64}
- luajit
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64
- mactel-boot
ExclusiveArch: x86_64
- manifest-tool
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- marked
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- matreshka
ExclusiveArch: %GPRbuild_arches
- maven-eclipse-plugin
ExclusiveArch: %{ix86} x86_64
- maxima
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc sparcv9
ExclusiveArch: %{ix86} x86_64 ppc sparcv9
- mcelog
ExclusiveArch: i686 x86_64
- mediaconch
ExclusiveArch: %{qt5_qtwebengine_arches}
- mellowplayer
ExclusiveArch: %{qt5_qtwebengine_arches}
- memkind
ExclusiveArch: x86_64
- memtest86+
ExclusiveArch: %{ix86} x86_64
- mesos
ExclusiveArch: x86_64
- microcode_ctl
ExclusiveArch: %{ix86} x86_64
- micropython
ExclusiveArch: %{arm} x86_64
- mine_detector
ExclusiveArch: %{GPRbuild_arches}
- minetest
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64
- mingw-wine-gecko
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- mkbootdisk
ExclusiveArch: %{ix86} sparc sparc64 x86_64
- mnemosyne
ExclusiveArch: noarch %{qt5_qtwebengine_arches}
- mocha
ExclusiveArch: %{nodejs_arches} noarch
- mod_mono
ExclusiveArch: %mono_arches
- module-build-service
ExclusiveArch: %{ix86} x86_64 noarch
- mokutil
ExclusiveArch: %{ix86} x86_64 aarch64
- mongo-tools
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- mongodb
ExclusiveArch: %{upstream_arches}
- mono
ExclusiveArch: %mono_arches
- mono-addins
ExclusiveArch: %mono_arches
- mono-basic
ExclusiveArch: %{mono_arches}
- mono-bouncycastle
ExclusiveArch: %mono_arches
- mono-cecil
ExclusiveArch: %mono_arches
- mono-cecil-flowanalysis
ExclusiveArch: %mono_arches
- mono-debugger
ExclusiveArch: %ix86 x86_64
- mono-reflection
ExclusiveArch: %mono_arches
- mono-tools
ExclusiveArch: %mono_arches
- mono-zeroconf
ExclusiveArch: %mono_arches
- monobristol
ExclusiveArch: %{mono_arches}
- monodevelop
ExclusiveArch: %mono_arches
- monodevelop-debugger-gdb
ExclusiveArch: %{mono_arches}
- monosim
ExclusiveArch: %mono_arches
- mrrescue
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64 ppc64
- msr-tools
ExclusiveArch: %{ix86} x86_64
- mustache-d
ExclusiveArch: %{ldc_arches}
- mysql-connector-net
ExclusiveArch: %{mono_arches}
- nacl-arm-binutils
ExclusiveArch: x86_64
- nacl-arm-newlib
ExclusiveArch: x86_64
- nacl-binutils
ExclusiveArch: x86_64
- nacl-gcc
ExclusiveArch: x86_64
- nacl-newlib
ExclusiveArch: x86_64
- nant
ExclusiveArch: %mono_arches
- nbc
ExclusiveArch: %{fpc_arches}
- nbdkit
ExclusiveArch: x86_64
- ndesk-dbus
ExclusiveArch: %{mono_arches}
- ndesk-dbus-glib
ExclusiveArch: %{mono_arches}
- newtonsoft-json
ExclusiveArch: %{mono_arches}
- nim
ExclusiveArch: %{nim_arches}
- nini
ExclusiveArch: %{mono_arches}
- node-gyp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs
ExclusiveArch: %{nodejs_arches}
- nodejs-Base64
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-abbrev
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-accepts
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-acorn
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-acorn-dynamic-import
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-acorn-jsx
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-acorn-object-spread
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-add-stream
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-after
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-agent-base
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-agentkeepalive
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ain2
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-align-text
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-alter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansi
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-bgblack
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-bgblue
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-bgcyan
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-bggreen
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-bgmagenta
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-bgred
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-bgwhite
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-bgyellow
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-black
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-blue
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-bold
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-colors
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-cyan
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansi-dim
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-escapes
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-font
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-gray
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-green
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansi-grey
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-hidden
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-inverse
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-italic
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-magenta
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansi-red
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-regex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-reset
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-strikethrough
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-styles
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansi-underline
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-white
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-wrap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansi-yellow
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansicolors
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansidiff
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansistyles
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-any-path
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-any-promise
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ap
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-append-field
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-append-transform
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-aproba
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-archiver
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-archiver-utils
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-archy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-are-we-there-yet
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-argparse
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-argsparser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-arr-diff
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-arr-exclude
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-arr-flatten
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-arr-union
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-buffer-from-string
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-array-differ
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-array-events
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-array-filter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-find
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-array-find-index
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-flatten
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-foreach
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-ify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-array-index
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-map
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-reduce
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-union
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-array-uniq
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-array-unique
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-arraybuffer-dot-slice
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-arraybuffer-equal
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-arrify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-as-number
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-asap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ascii-tree
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ascli
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-asn1
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-assert-plus
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-assertion-error
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-assume
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ast-traverse
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ast-types
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-astral
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-astral-angular-annotate
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-astral-pass
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-async
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-async-array-reduce
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-async-arrays
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-async-cache
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-async-each
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-async-limiter
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-async-queue
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-async-some
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-asynckit
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-atob
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-auto-bind
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-autoresolve
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ava-init
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-aws-sign
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-aws-sign2
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-aws4
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-babel-code-frame
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-babel-messages
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-babel-plugin-syntax-async-functions
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-babel-plugin-syntax-async-generators
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-babel-runtime
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-babylon
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-backbone
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-backoff
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-balanced-match
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-base
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-base-option
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-base-plugins
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-base32-encode
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-base64-arraybuffer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-base64-js
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-base64-url
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-base64id
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bash-match
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-basic-auth
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-basic-auth-connect
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-basic-auth-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-batch
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-bcrypt
ExclusiveArch: %{nodejs_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- nodejs-bcryptjs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-beeper
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-benchmark
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-better-assert
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-better-than-before
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bignumber-js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bind-obj-methods
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bindings
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-bit-mask
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bl
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-blob
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-block-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bluebird
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-body-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-boolbase
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-boom
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-brace-expansion
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-braces
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-breakable
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-browser-request
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-browser-stdout
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bson
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-buble
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-buf-compare
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-buffer-crc32
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-buffer-equal
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-buffer-shims
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-buffer-writer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-buffertools
ExclusiveArch: %{nodejs_arches}
- nodejs-bufferutil
ExclusiveArch: %{nodejs_arches}
- nodejs-builtin-modules
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-builtins
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bundle-dependencies
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-bunker
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-bunyan
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-burrito
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-busboy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-byline
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bytes
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cache-base
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-caching-transform
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-call-delayed
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-call-matcher
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-call-me-maybe
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-call-signature
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-callback-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-caller-callsite
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-caller-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-callsite
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-callsites
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-camel-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-camelcase
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-camelcase-keys
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-caniuse-db
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-capture-stack-trace
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-carrier
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-caseless
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-center-align
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chai
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chai-as-promised
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chai-cheerio
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chai-connect-middleware
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chai-fs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chai-json-schema
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chai-oauth2orize-grant
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chai-passport-strategy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chai-spies-next
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chainer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chainsaw
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chalk
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-change-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-char-spinner
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-character-parser
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-charenc
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-charm
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-check-error
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cheerio
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-child-process-close
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chmodr
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chownr
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chroma-js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chrono
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ci-info
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-circular-json
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cjson
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-clap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-class-utils
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-clean-css
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-clean-yaml-object
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-clear-require
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cli
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cli-color
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cli-spinner
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cli-table
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cliui
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-clone
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-clone-deep
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-clone-stats
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-closure-compiler
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cls
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cmd-shim
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-co
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-co-mocha
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-co-with-promise
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-coa
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-code-point-at
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-codemirror
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-coffee-coverage
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-collection-visit
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-collections
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-color-support
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-colors
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-colour
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-columnify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-combined-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-commander
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-common-path-prefix
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-commondir
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-commoner
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-commonmark
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-compare-func
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-compare-versions
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-component-emitter
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-component-indexof
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-component-inherit
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-compress-commons
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-compressible
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-compression
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-concat-map
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-concat-stream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-config-chain
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-connect
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-connect-livereload
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-connect-timeout
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-console-browserify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-console-dot-log
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-console-group
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-consolemd
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-constant-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-constantinople
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-content-disposition
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-content-type
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-conventional-changelog
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-conventional-changelog-angular
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-conventional-changelog-atom
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-conventional-changelog-codemirror
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-conventional-changelog-core
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-conventional-changelog-ember
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-conventional-changelog-eslint
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-conventional-changelog-express
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-conventional-changelog-jquery
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-conventional-changelog-jscs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-conventional-changelog-jshint
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-conventional-changelog-preset-loader
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-conventional-changelog-writer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-conventional-commits-filter
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-conventional-commits-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-conventional-recommended-bump
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-convert-hex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-convert-source-map
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cookie
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cookie-jar
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cookie-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cookie-session
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cookie-signature
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cookiejar
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cookies
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-copy-descriptor
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-core-assert
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-core-js
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-core-util-is
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cors
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-couch-login
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-coveralls
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-crc
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-crc32-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-create-error-class
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cross-spawn
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cross-spawn-async
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-crypt
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cryptiles
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-csrf
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-css
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-css-parse
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-css-select
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-css-stringify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-css-tree
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-css-what
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-csscomb-core
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-csslint
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-csso
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cssom
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-csurf
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-csv
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-csv-generate
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-csv-parse
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-csv-spectrum
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-csv-stringify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ctype
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-currently-unhandled
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cycle
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cyclist
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-d
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-dargs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dashdash
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-data-uri-to-buffer
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-date-now
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dateformat
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-death
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-debug
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-debug-fabulous
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-debug-log
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-debuglog
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-decamelize
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-decamelize-keys
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-decimal-js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-decompress-response
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dedent
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-deep-eql
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-deep-equal
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-deep-extend
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-deep-is
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-deeper
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-default-require-extensions
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-default-resolution
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-defaults
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-defence
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-defence-cli
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-deferred
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-define-properties
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-define-property
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-defined
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-defs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-degenerator
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-del
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-delayed-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-delegates
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-delete
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dep-graph
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-depd
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dependency-lister
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-deprecated
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-destroy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-detect-file
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-detect-indent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-detect-newline
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-detect-node
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-detective
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dezalgo
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dicer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-diff
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-difflet
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-difflib
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-dirty-chai
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-docopt
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-doctrine
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dom-serializer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-domelementtype
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-domhandler
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-domutils
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dot-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dot-prop
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dotfile-regex
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-dreamopt
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dryice
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-dtree
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-duplex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-duplexer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-duplexer2
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-duplexer3
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-duplexify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-duration
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-each
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-each-async
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ebnf-parser
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-echomd
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ecstatic
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-editor
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ee-first
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ejs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-emojione
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-empty-dir
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-encodeurl
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-encoding
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-end-of-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-engine-dot-io
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-engine-dot-io-client
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-engine-dot-io-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-entities
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-error-ex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-error-symbol
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-errorhandler
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-errs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-es-abstract
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-es-to-primitive
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-es5-ext
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-es5-shim
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-es6-iterator
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-es6-map
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-es6-promise
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-es6-promisify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-es6-set
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-es6-shim
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-es6-symbol
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-es6-weak-map
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-escallmatch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-escape-html
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-escape-regexp-component
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-escape-string-regexp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-escodegen
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-escope
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-espower
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-espower-location-detector
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-esprima
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-esprima-fb
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-esprima-harmony-jscs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-espurify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-esrecurse
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-estraverse
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-estraverse-fb
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-estree-walker
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-esutils
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-etag
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-event-emitter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-event-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-eventemitter2
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-eventemitter3
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-events
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-events-to-array
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-everything-dot-js
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-execa
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-exit
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-expand-brackets
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-expand-range
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-expand-tilde
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-expect
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-expect-dot-js
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-express
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-express-session
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-extend
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-extend-shallow
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-extended-emitter
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-extglob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-extsprintf
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-eyes
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-fake
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fancy-log
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-far
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fast-levenshtein
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-fastfall
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-faucet
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-faye-websocket
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-fd
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fd-slicer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fg-lodash
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-figures
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-file-entry-cache
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-file-sync-cmp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-file-uri-to-path
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-filed
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-filelist
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-filename-regex
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-fileset
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-fill-keys
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fill-range
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-finalhandler
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-find-cache-dir
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-find-up
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-findup-sync
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-first-chunk-stream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-flagged-respawn
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-flat-cache
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-flot
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-flush-write-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fmix
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fn-dot-name
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fn-name
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-follow
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-follow-redirects
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-for-each
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-for-in
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-for-own
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-foreach
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-foreground-child
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-forever-agent
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-form-data
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-formatio
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-formidable
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-forwarded
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-fragment-cache
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-freetree
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fresh
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-from
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-from2
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fs-dot-notify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fs-exists-cached
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fs-exists-sync
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-fs-ext
ExclusiveArch: %{nodejs_arches}
- nodejs-fs-extra
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fs-promise
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fs-temp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fs-vacuum
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fs-write-stream-atomic
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fs2
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fstream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fstream-ignore
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fstream-npm
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ftp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-function-bind
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-function-loop
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-gauge
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-gaze
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-gdal
ExclusiveArch: %{nodejs_arches}
- nodejs-generate-function
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-generate-object-property
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-generic-pool
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-get-pkg-repo
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-get-port
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-get-stdin
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-get-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-get-uri
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-get-value
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-getobject
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-gettext-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-git-dummy-commit
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-git-raw-commits
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-git-remote-origin-url
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-git-semver-tags
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-git-tails
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-gitconfiglocal
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-github-url-from-git
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-github-url-from-username-repo
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-glob
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-glob-base
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-glob-expand
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-glob-parent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-glob-to-regexp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-global-modules
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-global-prefix
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-globals
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-globby
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-globule
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-glogg
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-gnode
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-gonzales-pe
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-got
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-graceful-fs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-graceful-readlink
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grip
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-growl
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-angular-templates
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-banner
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-cli
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-compare-size
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-clean
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-concat
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-connect
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-copy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-contrib-csslint
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-cssmin
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-htmlmin
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-contrib-internal
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-less
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-nodeunit
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-requirejs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-contrib-uglify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-watch
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-git-authors
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-html-validation
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-init
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-known-options
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-legacy-log
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-legacy-log-utils
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-legacy-util
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-lib-contrib
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-saucelabs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-sed
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-simple-mocha
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-svgmin
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-util-args
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-util-options
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-util-process
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-util-property
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-wrap
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-gulp-mocha
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-gulp-ng-classify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-gulp-util
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-gulplog
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-gzip-size
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-handle-thing
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-handlebars
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-har-validator
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-ansi
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-binary
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-binary2
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-color
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-has-cors
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-flag
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-glob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-has-gulplog
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-has-unicode
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-value
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-values
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-yarn
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-hash_file
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-hawk
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-he
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-heap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-hex-to-array-buffer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-highlight-js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-historic-readline
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-hock
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-hoek
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-homedir-polyfill
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-hook-std
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-hooker
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-hosted-git-info
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-hsluv
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-html-minifier
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-htmlparser2
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-http-deceiver
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-http-errors
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-http-proxy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-http-proxy-agent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-http-server
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-http-signature
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-http2
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-https-proxy-agent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-humanize-ms
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-i
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-i18n-transform
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-i2c
ExclusiveArch: %{nodejs_arches}
- nodejs-iconv
ExclusiveArch: %{nodejs_arches}
- nodejs-iconv-lite
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-iferr
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ignore
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-immutable
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-import-local
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-imul
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-imurmurhash
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-indent-string
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-indexof
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-infinity-agent
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-inflight
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-info-symbol
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-inherit
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-inherits
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-inherits1
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ini
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-init-package-json
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-inline-source-map
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-install
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-int64-buffer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-intercept-require
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-interpret
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-into-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-invert-kv
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ip
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ipaddr-dot-js
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-irc-colors
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-irregular-plurals
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-absolute
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-accessor-descriptor
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-arrayish
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-arrow-function
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-boolean-object
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-buffer
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-builtin-module
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-callable
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-data-descriptor
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-date-object
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-descriptor
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-dir
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-dotfile
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-equal
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-equal-shallow
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-error
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-extendable
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-extglob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-finite
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-fullwidth-code-point
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-function
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-generator
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-generator-fn
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-generator-function
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-glob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-lower-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-module
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-my-json-valid
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-negated-glob
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-node
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-number
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-number-object
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-obj
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-object
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-observable
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-odd
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-path-cwd
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-path-in-cwd
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-path-inside
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-plain-obj
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-plain-object
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-primitive
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-promise
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-property
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-redirect
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-regex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-regexp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-registered
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-relative
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-retry-allowed
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-string
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-subset
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-symbol
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-text-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-typedarray
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-unc-path
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-upper-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-url
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-utf8
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-valid-glob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-valid-instance
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-windows
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-isarray
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-isexe
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-iso8601
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-isobject
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-isodate
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-isstream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-istanbul
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-istanbul-lib-coverage
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-istanbul-lib-hook
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-istanbul-lib-report
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-istanbul-lib-source-maps
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-istanbul-reports
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jade
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jasmine-growl-reporter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jasmine-reporters
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jest-mock
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jison
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jison-lex
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jju
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-joose
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-joosex-namespace-depended
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-joosex-simplerequest
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-js-base64
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-js-string-escape
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-js-tokens
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-js-yaml
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jschardet
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jscoverage
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jshint
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-json-diff
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-json-localizer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-json-parse-better-errors
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-json-parse-helpfulerror
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-json-stable-stringify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-json-stringify-safe
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-json3
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jsonfile
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jsonify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jsonm
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jsonparse
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jsonpointer
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jsonpointer-dot-js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jsonselect
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jwt-simple
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-keep-alive-agent
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-keygrip
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-keypress
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-kind-of
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-klaw
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-kuler2gpl
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-langdetect
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-latest-version
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-lazy-cache
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-lazystream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-lcid
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-lcov-parse
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-leaflet
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-leaflet-formbuilder
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-leaflet-hash
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-leche
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-left-pad
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-less
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-levn
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-lex-parser
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-libpq
ExclusiveArch: %{nodejs_arches}
- nodejs-libxmljs
ExclusiveArch: %{nodejs_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- nodejs-line-numbers
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-line-reader
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-linefix
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-linkify-it
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-load-grunt-tasks
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-load-json-file
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-locate-character
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-locate-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-lockfile
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-log-driver
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-log-ok
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-log-symbols
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-log-utils
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-lolex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-longest
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-loophole
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-loud-rejection
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-lower-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-lower-case-first
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-lowercase-keys
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-lru-cache
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-lru-queue
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ltx
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-magic-string
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-make-arrow-function
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-make-dir
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-make-error
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-make-generator-function
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-make-node
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-makedir
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-makeerror
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-map-cache
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-map-obj
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-map-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-map-visit
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mapnik
ExclusiveArch: %{nodejs_arches}
- nodejs-mapnik-pool
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mapnik-vector-tile
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-markdown
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-markdown-it-testgen
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-marked
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-matched
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-max-timeout
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-maxmin
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mbtiles
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-md5
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-md5-hex
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-md5-o-matic
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-mdn-data
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mdurl
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-media-typer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-memoize-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-memoizee
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-memwatch-next
ExclusiveArch: %{nodejs_arches}
- nodejs-meow
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-merge-descriptors
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-merge-stream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-metascript
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-method-override
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-methods
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-micromatch
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-millstone
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mime
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-mime-db
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mime-types
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mimeparse
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-mimic-response
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-minimalistic-assert
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-minimatch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-minimist
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-minimist-options
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-minipass
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-minstache
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mixin-deep
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mixin-object
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mkdirp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mkfiletree
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mock-bin
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mock-fs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mock-git
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-modify-values
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-module-not-found-error
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-moment
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-moment-timezone
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mongodb
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mongodb-core
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-monocle
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-morgan
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ms
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-muffin
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-multiline
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-multimatch
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-multiparty
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-multipipe
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-murmur-32
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mustache
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mutate-fs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mute-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mv
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-mysql
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mz
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-nan
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nan0
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-nan1
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nano
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nanomatch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nanoseconds
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-native-or-bluebird
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ncp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-needle
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-negotiator
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-nested-error-stacks
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-net-browserify-alt
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-netmask
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-next
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-next-tick
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ng-classify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-node-dot-extend
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-node-expat
ExclusiveArch: %{nodejs_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- nodejs-node-int64
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-node-markdown
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-node-print
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-node-static
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-node-status-codes
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-node-stringprep
ExclusiveArch: %{nodejs_arches}
- nodejs-node-uuid
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-nomnom
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-noncharacters
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nopt
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nopt-usage
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-noptify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-normalize-git-url
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-normalize-package-data
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-normalize-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npm-cache-filename
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npm-install-checks
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npm-license
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-npm-package-arg
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npm-registry-client
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-npm-run-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npm-stats
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npm-user-validate
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npmlog
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nsp-api
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nsp-audit-shrinkwrap
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nth-check
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-number-is-nan
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-numeral
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-oauth
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-oauth-sign
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-oauth2orize
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-object-assign
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-object-copy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-object-dot-entries
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-object-dot-omit
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-object-dot-pick
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-object-inspect
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-object-is
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-object-keys
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-object-visit
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-observable-to-promise
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-obuf
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-okay
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-on-finished
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-on-headers
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-once
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-onetime
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-only-shallow
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-oop
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-opal-runtime
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-open
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-opener
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-opn
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-option-cache
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-option-chain
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-optionator
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-options
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-optjs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-opts
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-orchestrator
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ordered-read-streams
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-os-homedir
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-os-locale
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-os-shim
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-os-tmpdir
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-osenv
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-output-file-sync
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-own-or
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-own-or-env
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-p-finally
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-p-is-promise
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-p-limit
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-p-locate
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pac-proxy-agent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pac-resolver
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-package
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-package-info
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-package-json
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-package-license
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-packaging
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-packet-reader
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pad
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pad-left
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-paperboy
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-parallel-transform
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-param-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-parse-github-repo-url
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-parse-glob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-parse-json
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-parse-ms
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-parse-passwd
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-parsejson
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-parseqs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-parserlib
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-parseuri
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-parseurl
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pascal-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pascalcase
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-passport-http-bearer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-passport-oauth
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-passport-oauth1
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-passport-oauth2
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-passport-oauth2-client-password
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-passport-strategy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-array
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-path-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-dirname
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-exists
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-extra
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-is-absolute
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-is-inside
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-key
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-parse
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-to-regexp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-path-type
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path2
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pathval
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pause
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pause-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pbkdf2-password
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pedding
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pegjs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pem
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pend
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pff
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pg
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pg-connection-string
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pg-cursor
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pg-escape
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pg-int8
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pg-native
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pg-pool
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pg-types
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pgpass
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pinkie
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pinkie-promise
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pkg-dir
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pkg-up
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pkginfo
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-platform
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-plur
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-portfinder
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-portscanner
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-posix-character-classes
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-posix-getopt
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-postgres-array
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-postgres-bytea
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-postgres-date
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-postgres-interval
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-precond
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-prelude-ls
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-prepend-http
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-preserve
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pretty-bytes
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pretty-hrtime
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pretty-ms
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pretty-time
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-private
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-process-nextick-args
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-proclaim
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-progress
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-progress-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-promise
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-promises-aplus-tests
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-prompt
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-promzard
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-propagate
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-propget
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-proto-list
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-proxy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-proxy-addr
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-proxy-agent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-proxyquire
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pruddy-error
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pseudomap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pubcontrol
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pump
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pumpify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-q
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-q-io
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-qs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-qtdatastream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-queue-async
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-quick-lru
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-qunit-extras
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-qunitjs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rainbowsocks
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-random-bytes
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-random-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-randomatic
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-range-parser
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-raw-body
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rc
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-re-emitter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-read-all-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-read-cmd-shim
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read-dir-files
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read-file
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read-installed
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read-json-sync
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read-package-json
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read-package-tree
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read-pkg
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-read-pkg-up
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-readable-stream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-readdir-enhanced
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-readdir-scoped-modules
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-readdirp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-realize-package-specifier
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-recast
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-rechoir
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-redent
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-reduce-component
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-regenerator
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-regex-cache
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-regex-not
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-registry-url
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-relateurl
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-remove-trailing-separator
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-repeat-element
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-repeat-string
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-repeating
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-repl
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-replace
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-replace-ext
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-replace-require-self
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-request
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-requestretry
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-require-cs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-require-directory
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-require-inject
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-require-main-filename
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-require-relative
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-require-uncached
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-require-yaml
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-requirejs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-requires-port
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-resolve
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-resolve-cwd
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-resolve-dir
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-resolve-from
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-resolve-pkg
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-resolve-url
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-response-time
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-resumer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ret
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-retry
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-reusify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-revalidator
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-rewire
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rfile
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rhea
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-right-align
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rimraf
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rndm
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-rollup
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-rollup-plugin-buble
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rollup-plugin-commonjs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rollup-plugin-json
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rollup-plugin-node-resolve
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rollup-plugin-typescript
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rollup-pluginutils
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ronn
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-run-parallel-limit
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-runforcover
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-safe-buffer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-safe-json-stringify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-safe-regex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-safecb
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-samsam
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sauce-tunnel
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-saucelabs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-sax
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-scmp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-secure-random
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-seedrandom
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-select-hose
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-semver
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-send
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-sentence-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sentiment
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-seq
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sequencify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-serialize-error
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-serve-index
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-serve-static
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-server-destroy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-set-blocking
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-set-getter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-set-immediate
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-set-immediate-shim
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-set-value
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-setimmediate
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-setprototypeof
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sha
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-shallow-clone
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-shebang-command
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-shebang-regex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-shelljs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-shelljs-nodecli
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-should
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-should-equal
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-should-format
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-should-http
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-should-type
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-showdown
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sift
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sigmund
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-signal-exit
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-silent-npm-registry-client
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-simple-assert
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-simple-asyncify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-simple-fmt
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-simple-is
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-simple-markdown
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-single-line-log
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sinon
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sinon-chai
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-sinon-restore
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-slash
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-sliced
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-slide
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-smart-buffer
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-snake-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-snapdragon
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-snapdragon-capture
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-snapdragon-capture-set
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-snapdragon-node
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-snapdragon-util
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-snockets
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-sntp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-socket-dot-io-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-socks-client
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-socks-proxy-agent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-sort-keys
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sorted-object
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-source-map
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-source-map-fixtures
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-source-map-resolve
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-source-map-support
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-source-map-url
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sparkles
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-spawn-sync
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-spawn-wrap
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-spdx-correct
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-spdx-exceptions
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-spdx-expression-parse
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-spdx-license-ids
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-spec
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-spec-js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-speedometer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-split
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-split-string
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-split2
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sprintf
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sprintf-js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sqlite3
ExclusiveArch: %{nodejs_arches}
- nodejs-srs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ssri
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-st
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stable
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stack-trace
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stack-utils
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-static-extend
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-static-favicon
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-statuses
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-std-mocks
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-combiner
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-consume
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stream-counter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stream-each
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-equal
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-pair
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-reduce
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-replace
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stream-shift
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-spigot
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-to-array
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-transform
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-streamsearch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-streamsink
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-streamtest
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-string
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-string-dot-prototype-dot-repeat
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-string-dot-prototype-dot-trim
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-string-width
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-string_decoder
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stringmap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stringscanner
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stringset
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stringstream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-strip-ansi
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-strip-bom
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-strip-bom-stream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-strip-bom-string
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-strip-color
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-strip-eof
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-strip-indent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-strip-json-comments
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-strip-path
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-strong-log-transformer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-strscanner
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stylus
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-success-symbol
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-superagent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-superagent-proxy
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-supertest
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-supervisor
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-supports-color
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-suspend
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-svgmin
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-svgo
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-swap-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-symbol-observable
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tad
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tap
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tap-mocha-reporter
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tap-out
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tap-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tap-spec
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tape
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tapes
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tar
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tar-pack
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tar-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-temp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-temp-dir
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-temp-write
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tempfile
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-temporary
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tern
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tern-cordovajs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tern-liferay
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-terst
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-test
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-test-exclude
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-testdata-w3c-json-form
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-testjs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-testswarm
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-testutil
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-text-extensions
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-text-table
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-thenify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-thenify-all
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-thread-sleep
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-through
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-through2
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-through2-filter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-thunkify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tildify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tilejson
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tilelive
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tilelive-mapnik
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tiletype
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-time-diff
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-time-stamp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-timed-out
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-timekeeper
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-timers-ext
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tiny-lr-fork
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tippex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-title-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tlds
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tmatch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tmp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tmpl
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-to-absolute-glob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-to-array
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-to-object-path
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-to-regex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-to-regex-range
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-touch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tough-cookie
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tracejs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-transformers
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-traverse
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-treeify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tressa
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-trim
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-trim-newlines
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-trim-off-newlines
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-trivial-deferred
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-try-open
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-try-thread-sleep
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tryor
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tsame
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tslib
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tsscmp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ttembed-js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tunnel-agent
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tv4
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-type-check
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-type-detect
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-type-is
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-type-name
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-typeahead.js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-typedarray
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-typescript
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-uc-dot-micro
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-uglify-to-browserify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-uid-number
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-uid-safe
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-uid2
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ultron
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-umask
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-unc-path-regex
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-underscore
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-underscore-dot-logger
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-unicode-7.0.0
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-unicode-length
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-union
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-union-value
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-unique-filename
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-unique-slug
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-unique-stream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-unique-temp-dir
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-unpipe
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-unset-value
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-upper-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-upper-case-first
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-uri-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-urix
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-url-join
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-url-parse-lax
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-url2
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-use
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-user-home
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-utf8
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-utfx
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-util
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-util-deprecate
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-util-extend
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-util-inspect
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-utile
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-utilities
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-utils-merge
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-uuid
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-vali-date
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-validate-npm-package-license
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-validate-npm-package-name
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-vary
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-vasync
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-verror
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-vhost
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-vinyl
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-vlq
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-vow
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-vow-fs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-vow-queue
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-vows
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-w3cjs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-walkdir
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-walker
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ware
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-warning-symbol
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-watchit
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-watershed
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-wbuf
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-wcwidth
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-weak-map
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-websocket-driver
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-when
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-whet-dot-extend
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-which
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-win-spawn
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-window-size
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-winston
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-with
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-wolfy87-eventemitter
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-woothee
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-wordwrap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-wrap-ansi
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-wrap-fn
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-wrappy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-write
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-write-file-atomic
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-write-json-file
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-write-pkg
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ws
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-xdg-basedir
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-xml2js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-xmlbuilder
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-xmldom
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-xmlhttprequest
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-xmlhttprequest-ssl
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-xregexp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-xtend
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-y18n
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-yallist
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-yapool
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-yargs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-yargs-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-yarn
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-yauzl
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-yeast
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-yn
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-zap
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-zip-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-zipfile
ExclusiveArch: %{nodejs_arches}
- nodejs-zlib-browserify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-zlibjs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodeunit
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- notify-sharp
ExclusiveArch: %{mono_arches}
- notify-sharp3
ExclusiveArch: %{mono_arches}
- nuget
ExclusiveArch: %{mono_arches}
- numatop
ExclusiveArch: %{ix86} x86_64
- nunit
ExclusiveArch: %{mono_arches}
- nunit2
ExclusiveArch: %{mono_arches}
- nvml
ExclusiveArch: x86_64
- nwchem
ExclusiveArch: x86_64 %{ix86}
- obfs4
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- oci-kvm-hook
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- oci-register-machine
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- oci-umount
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x %{mips}
- ocitools
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- odcs
ExclusiveArch: %{ix86} x86_64
- olpc-kbdshim
ExclusiveArch: %{ix86} %{arm}
- olpc-netutils
ExclusiveArch: %{ix86} %{arm}
- olpc-powerd
ExclusiveArch: %{ix86} %{arm}
- olpc-utils
ExclusiveArch: %{ix86} %{arm}
- onedrive
ExclusiveArch: %{ldc_arches}
- opal-prd
ExclusiveArch: ppc64le
- open-vm-tools
ExclusiveArch: x86_64
ExclusiveArch: %{ix86} x86_64
- openblas
ExclusiveArch: %{openblas_arches}
- openjfx
ExclusiveArch: %{ix86} x86_64
- openlibm
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 %{power64}
- openmx
ExclusiveArch: x86_64 %{ix86}
- openni
ExclusiveArch: %{ix86} x86_64 %{arm}
- openni-primesense
ExclusiveArch: %{ix86} x86_64 %{arm}
- openssl-ibmca
ExclusiveArch: s390 s390x
- openvswitch
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- origin
ExclusiveArch: %{go_arches}
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- orion
ExclusiveArch: %{qt5_qtwebengine_arches}
- orthorobot
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64 ppc64
- paflib
ExclusiveArch: ppc %{power64}
- pcc
ExclusiveArch: %{ix86} x86_64
- pcmciautils
ExclusiveArch: %{ix86} x86_64 ia64 ppc ppc64 %{arm}
- pdfmod
ExclusiveArch: %mono_arches
- peripety
ExclusiveArch: %{rust_arches}
- perl-Dumbbench
ExclusiveArch: %{ix86} x86_64 noarch
- perl-Parse-DMIDecode
ExclusiveArch: %{ix86} x86_64 ia64 aarch64
- pesign
ExclusiveArch: %{ix86} x86_64 ia64 aarch64 %{arm}
- pesign-test-app
ExclusiveArch: i686 x86_64 ia64 aarch64
- pinta
ExclusiveArch: %mono_arches
- pioneer
ExclusiveArch: %{ix86} x86_64
- playonlinux
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- plv8
ExclusiveArch: %v8_arches
- pocl
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- podman
ExclusiveArch: aarch64 %{arm} ppc64le s390x x86_64
- poppler-sharp
ExclusiveArch: %mono_arches
- popub
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- powerpc-utils
ExclusiveArch: ppc %{power64}
- ppc64-diag
ExclusiveArch: ppc %{power64}
- publican-jboss
ExclusiveArch: i686 x86_64
- pvs-sbcl
ExclusiveArch: %{ix86} x86_64 ppc sparcv9
- python-afl
ExclusiveArch: %{ix86} x86_64
- python-etcd
ExclusiveArch: noarch %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- python-healpy
ExclusiveArch: aarch64 ppc64 ppc64le x86_64 s390x
- python-openoffice
ExclusiveArch: noarch x86_64
- python-ovirt-register
ExclusiveArch: %{ix86} x86_64
- python-pymoc
ExclusiveArch: aarch64 ppc64 ppc64le x86_64 s390x
- python-rpi-gpio
ExclusiveArch: %{arm} aarch64
- q4wine
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- qcint
ExclusiveArch: x86_64
- qclib
ExclusiveArch: s390 s390x
- qevercloud
ExclusiveArch: %{qt5_qtwebengine_arches}
- qt4pas
ExclusiveArch: %{fpc_arches}
- qt5-qtwebengine
ExclusiveArch: %{qt5_qtwebengine_arches}
- quantum-espresso
ExclusiveArch: x86_64 %{ix86}
ExclusiveArch: %{openblas_arches}
- quentier
ExclusiveArch: %{qt5_qtwebengine_arches}
- rear
ExclusiveArch: %ix86 x86_64 ppc ppc64 ppc64le ia64
- redhat-lsb
ExclusiveArch: %{ix86} ia64 x86_64 ppc ppc64 s390 s390x %{arm} aarch64 ppc64le
- reg
ExclusiveArch: x86_64
- renderdoc
ExclusiveArch: %{ix86} x86_64
- reptyr
ExclusiveArch: %{ix86} x86_64 %{arm}
- rescene
ExclusiveArch: %{mono_arches}
- restsharp
ExclusiveArch: %{mono_arches}
- rhythmbox-alternative-toolbar
ExclusiveArch: %{ix86} %{arm} x86_64 ppc64 ppc64le
- rkt
ExclusiveArch: x86_64 aarch64 %{arm} %{ix86}
- rocm-runtime
ExclusiveArch: x86_64 aarch64
- rssguard
ExclusiveArch: %{qt5_qtwebengine_arches}
- runc
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le %{mips} s390x
- rust
ExclusiveArch: %{rust_arches}
- rust-addr2line
ExclusiveArch: %{rust_arches}
- rust-adler32
ExclusiveArch: %{rust_arches}
- rust-aho-corasick
ExclusiveArch: %{rust_arches}
- rust-ansi_term
ExclusiveArch: %{rust_arches}
- rust-arrayref
ExclusiveArch: %{rust_arches}
- rust-arrayvec
ExclusiveArch: %{rust_arches}
- rust-atk-sys
ExclusiveArch: %{rust_arches}
- rust-atty
ExclusiveArch: %{rust_arches}
- rust-backtrace
ExclusiveArch: %{rust_arches}
- rust-backtrace-sys
ExclusiveArch: %{rust_arches}
- rust-base100
ExclusiveArch: %{rust_arches}
- rust-base64
ExclusiveArch: %{rust_arches}
- rust-bencher
ExclusiveArch: %{rust_arches}
- rust-bincode
ExclusiveArch: %{rust_arches}
- rust-bincode0.8
ExclusiveArch: %{rust_arches}
- rust-bitflags
ExclusiveArch: %{rust_arches}
- rust-bitflags0.9
ExclusiveArch: %{rust_arches}
- rust-brev
ExclusiveArch: %{rust_arches}
- rust-build_const
ExclusiveArch: %{rust_arches}
- rust-bytecount
ExclusiveArch: %{rust_arches}
- rust-byteorder
ExclusiveArch: %{rust_arches}
- rust-bytes
ExclusiveArch: %{rust_arches}
- rust-bytes0.3
ExclusiveArch: %{rust_arches}
- rust-c_vec
ExclusiveArch: %{rust_arches}
- rust-cairo-rs
ExclusiveArch: %{rust_arches}
- rust-cairo-sys-rs
ExclusiveArch: %{rust_arches}
- rust-cbindgen
ExclusiveArch: %{rust_arches}
- rust-cc
ExclusiveArch: %{rust_arches}
- rust-cfg-if
ExclusiveArch: %{rust_arches}
- rust-chan
ExclusiveArch: %{rust_arches}
- rust-chrono
ExclusiveArch: %{rust_arches}
- rust-clap
ExclusiveArch: %{rust_arches}
- rust-cmake
ExclusiveArch: %{rust_arches}
- rust-coco
ExclusiveArch: %{rust_arches}
- rust-cpp_demangle
ExclusiveArch: %{rust_arches}
- rust-crc
ExclusiveArch: %{rust_arches}
- rust-crc-core
ExclusiveArch: %{rust_arches}
- rust-crossbeam
ExclusiveArch: %{rust_arches}
- rust-crossbeam-deque
ExclusiveArch: %{rust_arches}
- rust-crossbeam-epoch
ExclusiveArch: %{rust_arches}
- rust-crossbeam-utils
ExclusiveArch: %{rust_arches}
- rust-crypto-hash
ExclusiveArch: %{rust_arches}
- rust-cryptovec
ExclusiveArch: %{rust_arches}
- rust-cssparser
ExclusiveArch: %{rust_arches}
- rust-cssparser-macros
ExclusiveArch: %{rust_arches}
- rust-ctrlc
ExclusiveArch: %{rust_arches}
- rust-curl
ExclusiveArch: %{rust_arches}
- rust-curl-sys
ExclusiveArch: %{rust_arches}
- rust-custom_derive
ExclusiveArch: %{rust_arches}
- rust-data-encoding
ExclusiveArch: %{rust_arches}
- rust-datetime
ExclusiveArch: %{rust_arches}
- rust-dbus
ExclusiveArch: %{rust_arches}
- rust-deque
ExclusiveArch: %{rust_arches}
- rust-devicemapper
ExclusiveArch: %{rust_arches}
- rust-diff
ExclusiveArch: %{rust_arches}
- rust-difference
ExclusiveArch: %{rust_arches}
- rust-docopt
ExclusiveArch: %{rust_arches}
- rust-downcast-rs
ExclusiveArch: %{rust_arches}
- rust-dtoa
ExclusiveArch: %{rust_arches}
- rust-dtoa-short
ExclusiveArch: %{rust_arches}
- rust-edit-distance
ExclusiveArch: %{rust_arches}
- rust-either
ExclusiveArch: %{rust_arches}
- rust-encoding
ExclusiveArch: %{rust_arches}
- rust-encoding-index-japanese
ExclusiveArch: %{rust_arches}
- rust-encoding-index-korean
ExclusiveArch: %{rust_arches}
- rust-encoding-index-simpchinese
ExclusiveArch: %{rust_arches}
- rust-encoding-index-singlebyte
ExclusiveArch: %{rust_arches}
- rust-encoding-index-tradchinese
ExclusiveArch: %{rust_arches}
- rust-encoding_index_tests
ExclusiveArch: %{rust_arches}
- rust-encoding_rs
ExclusiveArch: %{rust_arches}
- rust-enum_primitive
ExclusiveArch: %{rust_arches}
- rust-env_logger
ExclusiveArch: %{rust_arches}
- rust-env_logger0.4
ExclusiveArch: %{rust_arches}
- rust-errln
ExclusiveArch: %{rust_arches}
- rust-errno
ExclusiveArch: %{rust_arches}
- rust-error-chain
ExclusiveArch: %{rust_arches}
- rust-exa
ExclusiveArch: %{rust_arches}
- rust-extprim
ExclusiveArch: %{rust_arches}
- rust-extprim_literals_macros
ExclusiveArch: %{rust_arches}
- rust-failure
ExclusiveArch: %{rust_arches}
- rust-failure_derive
ExclusiveArch: %{rust_arches}
- rust-fallible-iterator
ExclusiveArch: %{rust_arches}
- rust-fd-find
ExclusiveArch: %{rust_arches}
- rust-filetime
ExclusiveArch: %{rust_arches}
- rust-fixedbitset
ExclusiveArch: %{rust_arches}
- rust-flame
ExclusiveArch: %{rust_arches}
- rust-flate2
ExclusiveArch: %{rust_arches}
- rust-float-cmp
ExclusiveArch: %{rust_arches}
- rust-fnv
ExclusiveArch: %{rust_arches}
- rust-foreign-types
ExclusiveArch: %{rust_arches}
- rust-foreign-types-shared
ExclusiveArch: %{rust_arches}
- rust-fs2
ExclusiveArch: %{rust_arches}
- rust-futures
ExclusiveArch: %{rust_arches}
- rust-futures-async-runtime
ExclusiveArch: %{rust_arches}
- rust-futures-channel
ExclusiveArch: %{rust_arches}
- rust-futures-core
ExclusiveArch: %{rust_arches}
- rust-futures-cpupool
ExclusiveArch: %{rust_arches}
- rust-futures-executor
ExclusiveArch: %{rust_arches}
- rust-futures-io
ExclusiveArch: %{rust_arches}
- rust-futures-macro-async
ExclusiveArch: %{rust_arches}
- rust-futures-macro-await
ExclusiveArch: %{rust_arches}
- rust-futures-sink
ExclusiveArch: %{rust_arches}
- rust-futures-stable
ExclusiveArch: %{rust_arches}
- rust-futures-util
ExclusiveArch: %{rust_arches}
- rust-futures0.1
ExclusiveArch: %{rust_arches}
- rust-gdk
ExclusiveArch: %{rust_arches}
- rust-gdk-pixbuf
ExclusiveArch: %{rust_arches}
- rust-gdk-pixbuf-sys
ExclusiveArch: %{rust_arches}
- rust-gdk-sys
ExclusiveArch: %{rust_arches}
- rust-getopts
ExclusiveArch: %{rust_arches}
- rust-gimli
ExclusiveArch: %{rust_arches}
- rust-gio
ExclusiveArch: %{rust_arches}
- rust-gio-sys
ExclusiveArch: %{rust_arches}
- rust-git2
ExclusiveArch: %{rust_arches}
- rust-glib
ExclusiveArch: %{rust_arches}
- rust-glib-sys
ExclusiveArch: %{rust_arches}
- rust-glob
ExclusiveArch: %{rust_arches}
- rust-globset
ExclusiveArch: %{rust_arches}
- rust-gobject-sys
ExclusiveArch: %{rust_arches}
- rust-goblin
ExclusiveArch: %{rust_arches}
- rust-grep
ExclusiveArch: %{rust_arches}
- rust-gtk
ExclusiveArch: %{rust_arches}
- rust-gtk-rs-lgpl-docs
ExclusiveArch: %{rust_arches}
- rust-gtk-source-sys
ExclusiveArch: %{rust_arches}
- rust-gtk-sys
ExclusiveArch: %{rust_arches}
- rust-gzip-header
ExclusiveArch: %{rust_arches}
- rust-hamcrest
ExclusiveArch: %{rust_arches}
- rust-handlebars
ExclusiveArch: %{rust_arches}
- rust-heapsize
ExclusiveArch: %{rust_arches}
- rust-hex
ExclusiveArch: %{rust_arches}
- rust-home
ExclusiveArch: %{rust_arches}
- rust-horrorshow
ExclusiveArch: %{rust_arches}
- rust-http
ExclusiveArch: %{rust_arches}
- rust-httparse
ExclusiveArch: %{rust_arches}
- rust-humantime
ExclusiveArch: %{rust_arches}
- rust-hyper
ExclusiveArch: %{rust_arches}
- rust-idna
ExclusiveArch: %{rust_arches}
- rust-ignore
ExclusiveArch: %{rust_arches}
- rust-indexmap
ExclusiveArch: %{rust_arches}
- rust-intervaltree
ExclusiveArch: %{rust_arches}
- rust-iovec
ExclusiveArch: %{rust_arches}
- rust-iso8601
ExclusiveArch: %{rust_arches}
- rust-itertools
ExclusiveArch: %{rust_arches}
- rust-itoa
ExclusiveArch: %{rust_arches}
- rust-jobserver
ExclusiveArch: %{rust_arches}
- rust-language-tags
ExclusiveArch: %{rust_arches}
- rust-lazy-init
ExclusiveArch: %{rust_arches}
- rust-lazy_static
ExclusiveArch: %{rust_arches}
- rust-lazycell
ExclusiveArch: %{rust_arches}
- rust-libc
ExclusiveArch: %{rust_arches}
- rust-libdbus-sys
ExclusiveArch: %{rust_arches}
- rust-libgit2-sys
ExclusiveArch: %{rust_arches}
- rust-libloading
ExclusiveArch: %{rust_arches}
- rust-libssh2-sys
ExclusiveArch: %{rust_arches}
- rust-libudev
ExclusiveArch: %{rust_arches}
- rust-libudev-sys
ExclusiveArch: %{rust_arches}
- rust-libz-sys
ExclusiveArch: %{rust_arches}
- rust-linked-hash-map
ExclusiveArch: %{rust_arches}
- rust-lipsum
ExclusiveArch: %{rust_arches}
- rust-locale
ExclusiveArch: %{rust_arches}
- rust-log
ExclusiveArch: %{rust_arches}
- rust-log0.3
ExclusiveArch: %{rust_arches}
- rust-loopdev
ExclusiveArch: %{rust_arches}
- rust-lzma-sys
ExclusiveArch: %{rust_arches}
- rust-macro-attr
ExclusiveArch: %{rust_arches}
- rust-maplit
ExclusiveArch: %{rust_arches}
- rust-matches
ExclusiveArch: %{rust_arches}
- rust-md5
ExclusiveArch: %{rust_arches}
- rust-memchr
ExclusiveArch: %{rust_arches}
- rust-memmap
ExclusiveArch: %{rust_arches}
- rust-memoffset
ExclusiveArch: %{rust_arches}
- rust-metadeps
ExclusiveArch: %{rust_arches}
- rust-mime
ExclusiveArch: %{rust_arches}
- rust-miniz-sys
ExclusiveArch: %{rust_arches}
- rust-miniz_oxide
ExclusiveArch: %{rust_arches}
- rust-miniz_oxide_c_api
ExclusiveArch: %{rust_arches}
- rust-mio
ExclusiveArch: %{rust_arches}
- rust-mio-uds
ExclusiveArch: %{rust_arches}
- rust-mnt
ExclusiveArch: %{rust_arches}
- rust-modifier
ExclusiveArch: %{rust_arches}
- rust-multimap
ExclusiveArch: %{rust_arches}
- rust-natord
ExclusiveArch: %{rust_arches}
- rust-net2
ExclusiveArch: %{rust_arches}
- rust-newtype_derive
ExclusiveArch: %{rust_arches}
- rust-nix
ExclusiveArch: %{rust_arches}
- rust-nodrop
ExclusiveArch: %{rust_arches}
- rust-nom
ExclusiveArch: %{rust_arches}
- rust-num
ExclusiveArch: %{rust_arches}
- rust-num-bigint
ExclusiveArch: %{rust_arches}
- rust-num-complex
ExclusiveArch: %{rust_arches}
- rust-num-integer
ExclusiveArch: %{rust_arches}
- rust-num-iter
ExclusiveArch: %{rust_arches}
- rust-num-rational
ExclusiveArch: %{rust_arches}
- rust-num-traits
ExclusiveArch: %{rust_arches}
- rust-num-traits0.1
ExclusiveArch: %{rust_arches}
- rust-num_cpus
ExclusiveArch: %{rust_arches}
- rust-number_prefix
ExclusiveArch: %{rust_arches}
- rust-object
ExclusiveArch: %{rust_arches}
- rust-openssl
ExclusiveArch: %{rust_arches}
- rust-openssl-probe
ExclusiveArch: %{rust_arches}
- rust-openssl-sys
ExclusiveArch: %{rust_arches}
- rust-ordermap
ExclusiveArch: %{rust_arches}
- rust-owning_ref
ExclusiveArch: %{rust_arches}
- rust-packaging
ExclusiveArch: %{rust_arches} noarch
- rust-pad
ExclusiveArch: %{rust_arches}
- rust-pager
ExclusiveArch: %{rust_arches}
- rust-pango
ExclusiveArch: %{rust_arches}
- rust-pango-sys
ExclusiveArch: %{rust_arches}
- rust-pangocairo
ExclusiveArch: %{rust_arches}
- rust-pangocairo-sys
ExclusiveArch: %{rust_arches}
- rust-peeking_take_while
ExclusiveArch: %{rust_arches}
- rust-percent-encoding
ExclusiveArch: %{rust_arches}
- rust-permutate
ExclusiveArch: %{rust_arches}
- rust-permutohedron
ExclusiveArch: %{rust_arches}
- rust-pest
ExclusiveArch: %{rust_arches}
- rust-pest_derive
ExclusiveArch: %{rust_arches}
- rust-phf
ExclusiveArch: %{rust_arches}
- rust-phf_codegen
ExclusiveArch: %{rust_arches}
- rust-phf_generator
ExclusiveArch: %{rust_arches}
- rust-phf_shared
ExclusiveArch: %{rust_arches}
- rust-pkg-config
ExclusiveArch: %{rust_arches}
- rust-plain
ExclusiveArch: %{rust_arches}
- rust-pretty-git-prompt
ExclusiveArch: %{rust_arches}
- rust-pretty_env_logger
ExclusiveArch: %{rust_arches}
- rust-proc-macro2
ExclusiveArch: %{rust_arches}
- rust-procedural-masquerade
ExclusiveArch: %{rust_arches}
- rust-pulldown-cmark
ExclusiveArch: %{rust_arches}
- rust-quick-error
ExclusiveArch: %{rust_arches}
- rust-quickcheck
ExclusiveArch: %{rust_arches}
- rust-quickersort
ExclusiveArch: %{rust_arches}
- rust-quote
ExclusiveArch: %{rust_arches}
- rust-rand
ExclusiveArch: %{rust_arches}
- rust-rayon
ExclusiveArch: %{rust_arches}
- rust-rayon-core
ExclusiveArch: %{rust_arches}
- rust-regex
ExclusiveArch: %{rust_arches}
- rust-regex-syntax
ExclusiveArch: %{rust_arches}
- rust-relay
ExclusiveArch: %{rust_arches}
- rust-remove_dir_all
ExclusiveArch: %{rust_arches}
- rust-ripgrep
ExclusiveArch: %{rust_arches}
- rust-rustc-demangle
ExclusiveArch: %{rust_arches}
- rust-rustc-serialize
ExclusiveArch: %{rust_arches}
- rust-rustc-test
ExclusiveArch: %{rust_arches}
- rust-rustc_version
ExclusiveArch: %{rust_arches}
- rust-rustdoc-stripper
ExclusiveArch: %{rust_arches}
- rust-rustfilt
ExclusiveArch: %{rust_arches}
- rust-safemem
ExclusiveArch: %{rust_arches}
- rust-same-file
ExclusiveArch: %{rust_arches}
- rust-scoped-tls
ExclusiveArch: %{rust_arches}
- rust-scoped_threadpool
ExclusiveArch: %{rust_arches}
- rust-scopeguard
ExclusiveArch: %{rust_arches}
- rust-scroll
ExclusiveArch: %{rust_arches}
- rust-scroll_derive
ExclusiveArch: %{rust_arches}
- rust-seahash
ExclusiveArch: %{rust_arches}
- rust-semver
ExclusiveArch: %{rust_arches}
- rust-semver-parser
ExclusiveArch: %{rust_arches}
- rust-serde
ExclusiveArch: %{rust_arches}
- rust-serde0.8
ExclusiveArch: %{rust_arches}
- rust-serde_bytes
ExclusiveArch: %{rust_arches}
- rust-serde_cbor
ExclusiveArch: %{rust_arches}
- rust-serde_derive
ExclusiveArch: %{rust_arches}
- rust-serde_ignored
ExclusiveArch: %{rust_arches}
- rust-serde_json
ExclusiveArch: %{rust_arches}
- rust-serde_json0.8
ExclusiveArch: %{rust_arches}
- rust-serde_test
ExclusiveArch: %{rust_arches}
- rust-serde_urlencoded
ExclusiveArch: %{rust_arches}
- rust-serde_yaml
ExclusiveArch: %{rust_arches}
- rust-sha1
ExclusiveArch: %{rust_arches}
- rust-shell-escape
ExclusiveArch: %{rust_arches}
- rust-shlex
ExclusiveArch: %{rust_arches}
- rust-siphasher
ExclusiveArch: %{rust_arches}
- rust-slab
ExclusiveArch: %{rust_arches}
- rust-slab0.3
ExclusiveArch: %{rust_arches}
- rust-smallvec
ExclusiveArch: %{rust_arches}
- rust-socket2
ExclusiveArch: %{rust_arches}
- rust-sourceview
ExclusiveArch: %{rust_arches}
- rust-spin
ExclusiveArch: %{rust_arches}
- rust-spmc
ExclusiveArch: %{rust_arches}
- rust-stable_deref_trait
ExclusiveArch: %{rust_arches}
- rust-streaming-stats
ExclusiveArch: %{rust_arches}
- rust-strings
ExclusiveArch: %{rust_arches}
- rust-strsim
ExclusiveArch: %{rust_arches}
- rust-structopt
ExclusiveArch: %{rust_arches}
- rust-structopt-derive
ExclusiveArch: %{rust_arches}
- rust-syn
ExclusiveArch: %{rust_arches}
- rust-synstructure
ExclusiveArch: %{rust_arches}
- rust-sys-info
ExclusiveArch: %{rust_arches}
- rust-tabwriter
ExclusiveArch: %{rust_arches}
- rust-take
ExclusiveArch: %{rust_arches}
- rust-take_mut
ExclusiveArch: %{rust_arches}
- rust-tar
ExclusiveArch: %{rust_arches}
- rust-tempdir
ExclusiveArch: %{rust_arches}
- rust-tempfile
ExclusiveArch: %{rust_arches}
- rust-term
ExclusiveArch: %{rust_arches}
- rust-term_grid
ExclusiveArch: %{rust_arches}
- rust-term_size
ExclusiveArch: %{rust_arches}
- rust-termcolor
ExclusiveArch: %{rust_arches}
- rust-termion
ExclusiveArch: %{rust_arches}
- rust-test-assembler
ExclusiveArch: %{rust_arches}
- rust-textwrap
ExclusiveArch: %{rust_arches}
- rust-thread-id
ExclusiveArch: %{rust_arches}
- rust-thread_local
ExclusiveArch: %{rust_arches}
- rust-threadpool
ExclusiveArch: %{rust_arches}
- rust-time
ExclusiveArch: %{rust_arches}
- rust-tokei
ExclusiveArch: %{rust_arches}
- rust-tokio
ExclusiveArch: %{rust_arches}
- rust-tokio-core
ExclusiveArch: %{rust_arches}
- rust-tokio-executor
ExclusiveArch: %{rust_arches}
- rust-tokio-fs
ExclusiveArch: %{rust_arches}
- rust-tokio-io
ExclusiveArch: %{rust_arches}
- rust-tokio-process
ExclusiveArch: %{rust_arches}
- rust-tokio-proto
ExclusiveArch: %{rust_arches}
- rust-tokio-reactor
ExclusiveArch: %{rust_arches}
- rust-tokio-service
ExclusiveArch: %{rust_arches}
- rust-tokio-signal
ExclusiveArch: %{rust_arches}
- rust-tokio-tcp
ExclusiveArch: %{rust_arches}
- rust-tokio-threadpool
ExclusiveArch: %{rust_arches}
- rust-tokio-timer
ExclusiveArch: %{rust_arches}
- rust-tokio-udp
ExclusiveArch: %{rust_arches}
- rust-toml
ExclusiveArch: %{rust_arches}
- rust-traitobject
ExclusiveArch: %{rust_arches}
- rust-typed-arena
ExclusiveArch: %{rust_arches}
- rust-ucd-util
ExclusiveArch: %{rust_arches}
- rust-unicase
ExclusiveArch: %{rust_arches}
- rust-unicode-bidi
ExclusiveArch: %{rust_arches}
- rust-unicode-normalization
ExclusiveArch: %{rust_arches}
- rust-unicode-segmentation
ExclusiveArch: %{rust_arches}
- rust-unicode-width
ExclusiveArch: %{rust_arches}
- rust-unicode-xid
ExclusiveArch: %{rust_arches}
- rust-unindent
ExclusiveArch: %{rust_arches}
- rust-unreachable
ExclusiveArch: %{rust_arches}
- rust-unsafe-any
ExclusiveArch: %{rust_arches}
- rust-untrusted
ExclusiveArch: %{rust_arches}
- rust-url
ExclusiveArch: %{rust_arches}
- rust-users
ExclusiveArch: %{rust_arches}
- rust-utf8-ranges
ExclusiveArch: %{rust_arches}
- rust-uuid
ExclusiveArch: %{rust_arches}
- rust-vec_map
ExclusiveArch: %{rust_arches}
- rust-version-sync
ExclusiveArch: %{rust_arches}
- rust-version_check
ExclusiveArch: %{rust_arches}
- rust-void
ExclusiveArch: %{rust_arches}
- rust-wait-timeout
ExclusiveArch: %{rust_arches}
- rust-walkdir
ExclusiveArch: %{rust_arches}
- rust-which
ExclusiveArch: %{rust_arches}
- rust-xattr
ExclusiveArch: %{rust_arches}
- rust-xz2
ExclusiveArch: %{rust_arches}
- rust-yaml-rust
ExclusiveArch: %{rust_arches}
- rust-yaml-rust0.3
ExclusiveArch: %{rust_arches}
- rust-yubibomb
ExclusiveArch: %{rust_arches}
- rust-zoneinfo_compiled
ExclusiveArch: %{rust_arches}
- s390utils
ExclusiveArch: s390 s390x
- safetyblanket
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64 ppc64
- sagemath
ExclusiveArch: aarch64 %{arm} %{ix86} x86_64 ppc sparcv9
- sbcl
ExclusiveArch: %{arm} %{ix86} x86_64 ppc sparcv9 aarch64
- sbd
ExclusiveArch: i686 x86_64 s390x
- sbsigntools
ExclusiveArch: x86_64 aarch64 %{arm} %{ix86}
- seabios
ExclusiveArch: x86_64
- seamonkey
ExclusiveArch: %{ix86} x86_64
- servicelog
ExclusiveArch: ppc %{power64}
- sgabios
ExclusiveArch: %{ix86} x86_64
- sharpfont
ExclusiveArch: %mono_arches
- sharpziplib
ExclusiveArch: %{mono_arches}
- shim
ExclusiveArch: %{efi}
- shim-unsigned-aarch64
ExclusiveArch: aarch64
- shim-unsigned-x64
ExclusiveArch: x86_64
- sigul
ExclusiveArch: x86_64
- skychart
ExclusiveArch: %{fpc_arches}
- smuxi
ExclusiveArch: %{ix86} x86_64 %{arm} ppc64le
- snapd
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- source-to-image
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- sparkleshare
ExclusiveArch: %{mono_arches}
- spicctrl
ExclusiveArch: %{ix86} x86_64
- spice
ExclusiveArch: x86_64
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- spice-xpi
ExclusiveArch: i686 x86_64 armv6l armv7l armv7hl aarch64
- spring
ExclusiveArch: %{ix86} x86_64
- springlobby
ExclusiveArch: %{ix86} x86_64
- startdde
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- statsd
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- stratis-cli
ExclusiveArch: %{rust_arches} noarch
- stratisd
ExclusiveArch: %{rust_arches}
- stripesnoop
ExclusiveArch: %{ix86} x86_64
- supermin
ExclusiveArch: x86_64
- syncthing
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- sysbench
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips}
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64
- syslinux
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{ix86} x86_64
- taglib-sharp
ExclusiveArch: %{mono_arches}
- tarantool
ExclusiveArch: %{ix86} x86_64 armv7hl armv7hnl aarch64
- tboot
ExclusiveArch: %{ix86} x86_64
- templates_parser
ExclusiveArch: %GPRbuild_arches
- ternimal
ExclusiveArch: %{rust_arches}
- themonospot-base
ExclusiveArch: %mono_arches
- themonospot-console
ExclusiveArch: %mono_arches
- themonospot-gui-gtk
ExclusiveArch: %mono_arches
- themonospot-plugin-avi
ExclusiveArch: %mono_arches
- themonospot-plugin-mkv
ExclusiveArch: %mono_arches
- thermald
ExclusiveArch: %{ix86} x86_64
- thunderbird-enigmail
ExclusiveArch: %{ix86} %{arm} ppc64 ppc64le s390x x86_64 noarch
- tilix
ExclusiveArch: %{ldc_arches}
- tmux-top
ExclusiveArch: %{go_arches}
- tomboy
ExclusiveArch: %{mono_arches}
- tuned-profiles-nfv-host-bin
ExclusiveArch: %{ix86} x86_64
- uClibc
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips}
- ucx
ExclusiveArch: aarch64 ppc64le x86_64
- ugene
ExclusiveArch: %{ix86} x86_64
- uglify-js
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- uglify-js1
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- unetbootin
ExclusiveArch: %{ix86} x86_64
- v8
ExclusiveArch: %{ix86} x86_64 %{arm} ppc mipsel mips64el
- v8-314
ExclusiveArch: %{ix86} x86_64 %{arm} mips mipsel ppc ppc64
- valgrind
ExclusiveArch: %{ix86} x86_64 ppc ppc64 ppc64le s390x armv7hl aarch64
- vboot-utils
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- vdsm
ExclusiveArch: x86_64 %{power64} aarch64
- vim-go
ExclusiveArch: %{?golang_arches}%{!?golang_arches:%{ix86} x86_64 %{arm}}
- virtualbox-guest-additions
ExclusiveArch: i686 x86_64
- virtualplanet
ExclusiveArch: %{fpc_arches}
- vrq
ExclusiveArch: %{ix86} x86_64
- warsow
ExclusiveArch: %{ix86} x86_64 %{arm}
- warsow-data
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{ix86} x86_64 %{arm}
- webkit-sharp
ExclusiveArch: %mono_arches
- webkit2-sharp
ExclusiveArch: %mono_arches
- wine
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
ExclusiveArch: %{ix86} %{arm}
- winetricks
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- wiredtiger
ExclusiveArch: x86_64 aarch64 ppc64le
- wraplinux
ExclusiveArch: %{ix86} x86_64
- wxMaxima
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc sparcv9
- x2goclient
ExclusiveArch: x86_64
- x86info
ExclusiveArch: %{ix86} x86_64
- xen
ExclusiveArch: %{ix86} x86_64 armv7hl aarch64
- xorg-x11-drv-armsoc
ExclusiveArch: %{arm} aarch64
- xorg-x11-drv-geode
ExclusiveArch: %{ix86}
- xorg-x11-drv-intel
ExclusiveArch: %{ix86} x86_64 ia64
- xorg-x11-drv-omap
ExclusiveArch: %{arm}
- xorg-x11-drv-openchrome
ExclusiveArch: %{ix86} x86_64
- xorg-x11-drv-opentegra
ExclusiveArch: %{arm}
- xorg-x11-drv-vesa
ExclusiveArch: %{ix86} x86_64
- xorg-x11-drv-vmware
ExclusiveArch: %{ix86} x86_64 ia64
- xsp
ExclusiveArch: %mono_arches
- xsupplicant
ExclusiveArch: %{ix86} x86_64 ppc %{power64}
- ycssmin
ExclusiveArch: %{nodejs_arches} noarch
- zeromq-ada
ExclusiveArch: %{GPRbuild_arches}
- zlib-ada
ExclusiveArch: %{GPRbuild_arches}
5 years, 11 months
Architecture specific change in rpms/esc.git
by githook-noreply@fedoraproject.org
The package rpms/esc.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/esc.git/commit/?id=f2041c7865b832....
Change:
+ExcludeArch: aarch64 i686
Thanks.
Full change:
============
commit f2041c7865b832eb44e4385c148d062c5f7ab605
Author: Jack Magne <jmagne(a)localhost.localdomain>
Date: Thu Jun 7 17:32:27 2018 -0700
Remove coolkey dependency and have esc work against opensc, port to master.
diff --git a/esc b/esc
index 34b5c9a..cce19fc 100755
--- a/esc
+++ b/esc
@@ -44,6 +44,8 @@ COMPREG_DAT=compreg.dat
LOCK_FILE=lock
PARENT_LOCK_FILE=.parentlock
+export OPENSC_CONF=$ESC_PATH/opensc.esc.conf
+
function isProgRunning {
userID=$(whoami)
diff --git a/esc-1.1.1-fix1.patch b/esc-1.1.1-fix1.patch
new file mode 100644
index 0000000..02a330d
--- /dev/null
+++ b/esc-1.1.1-fix1.patch
@@ -0,0 +1,8237 @@
+diff -up ./esc/opensc.esc.conf.fix1 ./esc/opensc.esc.conf
+--- ./esc/opensc.esc.conf.fix1 2018-04-26 11:44:38.429986239 -0700
++++ ./esc/opensc.esc.conf 2018-04-26 11:44:38.429986239 -0700
+@@ -0,0 +1,48 @@
++app default {
++ enable_default_driver = true;
++
++ card_atr
++ 3B:FF:14:00:FF:81:31:FE:45:80:25:A0:00:00:00:56:57:53:43:36:35:30:03:03:38 {
++ pkcs11_enable_InitToken = yes;
++ }
++
++ card_atr
++ 3B:FF:14:00:FF:81:31:FE:45:80:25:A0:00:00:00:56:57:53:43:36:35:30:01:00:39 {
++ pkcs11_enable_InitToken = yes;
++ }
++
++ card_atr
++ 3B:FF:14:00:FF:81:31:FE:45:80:25:A0:00:00:00:56:57:53:43:36:35:30:03:00:3B {
++ pkcs11_enable_InitToken = yes;
++ }
++ reader_driver ctapi {
++ }
++ reader_driver pcsc {
++ }
++ reader_driver openct {
++ };
++ card_drivers = coolkey, cac, piv, default;
++ secure_messaging local_authentic {
++ module_path = /usr/lib64;
++ }
++ framework pkcs15 {
++ builtin_emulators = coolkey, cac, piv;
++ }
++}
++app opensc-pkcs11 {
++ pkcs11 {
++ }
++}
++app onepin-opensc-pkcs11 {
++ pkcs11 {
++ slots_per_card = 1;
++ }
++}
++app tokend {
++ framework tokend {
++ }
++}
++app cardmod {
++ reader_driver cardmod {
++ }
++}
+diff -up ./esc/src/app/daemon/manifest.mn.fix1 ./esc/src/app/daemon/manifest.mn
+--- ./esc/src/app/daemon/manifest.mn.fix1 2017-07-24 16:46:36.000000000 -0700
++++ ./esc/src/app/daemon/manifest.mn 2018-04-26 14:55:48.926180480 -0700
+@@ -30,13 +30,13 @@ endif
+
+
+
+-DEFINES += -I$(SYS_INC)/nspr4 -I$(SYS_INC)/nss3 -I$(SYS_INC)/$(MOZ_OFFSET)/nspr -I$(SYS_INC)/$(MOZ_OFFSET)/nss
++DEFINES += -I$(SYS_INC)/nspr4 -I$(SYS_INC)/nss3 -I$(SYS_INC)/$(MOZ_OFFSET)/nspr -I$(SYS_INC)/$(MOZ_OFFSET)/nss -I$(SYS_INC)/PCSC -I$(CORE_DEPTH)/src/lib/coolkey
+
+ DEFINES += $(shell pkg-config --cflags xft)
+
+ CPPFLAGS += $(DEFINES) -g
+
+-LDFLAGS += -lstdc++ -L$(CORE_DIST)/$(OBJDIR)/lib -L$(XULRUNNER_LIBS_LDFLAGS) -lnss3 -lnspr4 -lssl3 -lckyapplet $(shell pkg-config --libs xft)
++LDFLAGS += -lstdc++ -L$(CORE_DIST)/$(OBJDIR)/lib -L$(XULRUNNER_LIBS_LDFLAGS) -lnss3 -lnspr4 -lssl3 $(shell pkg-config --libs xft)
+ LDFLAGS += -lckymanager -lhttpchunked -lm -lnss3 -lplc4 -lplds4 -lX11
+ # MODULE public and private header directories are implicitly REQUIRED.
+
+diff -up ./esc/src/app/xpcom/Makefile.sdk.fix1 ./esc/src/app/xpcom/Makefile.sdk
+--- ./esc/src/app/xpcom/Makefile.sdk.fix1 2017-07-24 16:46:36.000000000 -0700
++++ ./esc/src/app/xpcom/Makefile.sdk 2018-04-26 11:44:38.430986233 -0700
+@@ -144,8 +144,8 @@ NSPR_INCLUDE = /usr/include/nspr4
+ GECKO_INCLUDES = -I $(GECKO_SDK_PATH)/include -I $(GECKO_INCLUDE_PATH) -I $(NSPR_INCLUDE) -I $(NSS_INCLUDE) -I $(GECKO_INCLUDE_PATH)/xpcom
+
+
+-COOL_INCLUDES = -I $(CORE_INC)/ckymanager -I $(CORE_INC)/httpchuncked
+-COOL_LDFLAGS = -L$(CORE_DIST)/lib -lckymanager -lhttpchunked $(CKY_LIB_LDD) -lckyapplet
++COOL_INCLUDES = -I $(CORE_INC)/ckymanager -I $(CORE_INC)/httpchuncked -I /usr/include/PCSC -I $(CORE_DEPTH)/src/lib/coolkey
++COOL_LDFLAGS = -L$(CORE_DIST)/lib -lckymanager -lhttpchunked
+
+ OBJECT = rhCoolKey.o
+
+@@ -258,6 +258,7 @@ $(DEPLOY_OBJDIR):
+
+ cd $(CORE_DEPTH)/$(DEPLOY_OFFSET)/app/xul/esc; zip -r test.zip * -x *\CVS\* \*.fix*; unzip -d esc test.zip ; rm -f test.zip
+ $(PYTHON_BIN) $(GECKO_SDK_PATH)/bin/install_app.py $(CORE_DEPTH)$(DEPLOY_OFFSET)/app/xul/esc/esc $(DEPLOY_OBJDIR)/esc --appName esc
++ $(NSINSTALL) $(CORE_DEPTH)/opensc.esc.conf $(DEPLOY_OBJDIR)/esc
+
+ ifeq ($(OS_ARCH), Darwin)
+ mkdir $(DEPLOY_OBJDIR)/$(XULRUNNER_FRAME_BASE)
+diff -up ./esc/src/app/xul/esc/application.ini.fix1 ./esc/src/app/xul/esc/application.ini
+--- ./esc/src/app/xul/esc/application.ini.fix1 2017-07-24 16:46:36.000000000 -0700
++++ ./esc/src/app/xul/esc/application.ini 2018-04-26 11:44:38.431986227 -0700
+@@ -25,7 +25,7 @@ Vendor=RedHat
+ Name=ESC
+ ;
+ ; This field specifies your application's version. This field is optional.
+-Version=1.1.0-24
++Version=1.1.1-1
+ ;
+ ; This field specifies your application's build ID (timestamp). This field is
+ ; required.
+@@ -47,6 +47,6 @@ MinVersion=6.0.0
+ ; application requires. It should be specified if your application uses
+ ; unfrozen interfaces. Specifying 1.8 matches all releases with a version
+ ; prefixed by 1.8 (e.g., 1.8a4, 1.8b, 1.8.2).
+-MaxVersion=50.0.0
++MaxVersion=60.0.0
+
+ [Shell]
+diff -up ./esc/src/app/xul/esc/chrome/content/esc/advancedinfo.xul.fix1 ./esc/src/app/xul/esc/chrome/content/esc/advancedinfo.xul
+--- ./esc/src/app/xul/esc/chrome/content/esc/advancedinfo.xul.fix1 2017-07-24 16:46:36.000000000 -0700
++++ ./esc/src/app/xul/esc/chrome/content/esc/advancedinfo.xul 2018-04-26 11:44:38.431986227 -0700
+@@ -33,7 +33,6 @@
+ <stringbundle id="esc_strings" src="chrome://esc/locale/esc.properties"/>
+ <script src="AdvancedInfo.js"/>
+ <script src="ESC.js"/>
+-<script src="TRAY.js"/>
+ <grid class="logoBox">
+ <rows >
+ <row>
+diff -up ./esc/src/app/xul/esc/chrome/content/esc/config.xul.fix1 ./esc/src/app/xul/esc/chrome/content/esc/config.xul
+--- ./esc/src/app/xul/esc/chrome/content/esc/config.xul.fix1 2017-07-24 16:46:36.000000000 -0700
++++ ./esc/src/app/xul/esc/chrome/content/esc/config.xul 2018-04-26 11:44:38.432986221 -0700
+@@ -30,7 +30,6 @@
+ onunload="cleanup();"
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+ <stringbundle id="esc_strings" src="chrome://esc/locale/esc.properties"/>
+-<script src="TRAY.js"/>
+ <script src="ESC.js"/>
+ <hbox class="logoBox" >
+ <image id="logoImage"/>
+diff -up ./esc/src/app/xul/esc/chrome/content/esc/ESC.js.fix1 ./esc/src/app/xul/esc/chrome/content/esc/ESC.js
+--- ./esc/src/app/xul/esc/chrome/content/esc/ESC.js.fix1 2017-07-24 16:46:36.000000000 -0700
++++ ./esc/src/app/xul/esc/chrome/content/esc/ESC.js 2018-04-26 11:44:38.433986216 -0700
+@@ -151,7 +151,6 @@ jsNotify.prototype = {
+ //
+ function cleanup()
+ {
+- TrayRemoveWindow(null);
+ try {
+ netkey.rhCoolKeyUnSetNotifyCallback(gNotify);
+ } catch(e) {
+@@ -1881,11 +1880,6 @@ function hiddenWindowStartup()
+
+ // We do want notify events though
+ var doPreserveNotify = true;
+-
+-
+- SetMenuItemsText();
+- HideWindow();
+- TrayRemoveWindow(doPreserveNotify);
+ }
+
+ function IdentifyWindow()
+@@ -2950,7 +2944,6 @@ function DoFormatCoolKey(type)
+ var screennamepwd = null;
+ var tokencode = null;
+
+-
+ if (!FormatCoolKey(keyType, keyID, lType, screenname, pin,screennamepwd,tokencode))
+ {
+ failed = 1;
+@@ -2997,10 +2990,6 @@ function OnCoolKeyInserted(keyType, keyI
+ var allowNotify = DoCoolKeyGetConfigValue(ESC_ALLOW_NOTIFICATIONS);
+
+ recordMessage("Key inserted!" + "Window " + IdentifyWindow());
+- if(gHiddenPage)
+- {
+- TrayShowNotificationIcon();
+- }
+
+ if (!GetCoolKeyIsEnrolled(keyType, keyID) )
+ {
+@@ -3024,7 +3013,6 @@ function OnCoolKeyInserted(keyType, keyI
+ SelectRowByKeyID(keyType, keyID);
+
+ }
+-
+ if(gHiddenPage)
+ {
+ var phoneHomeSuccess = 1;
+@@ -3269,12 +3257,11 @@ function Validate()
+
+ function OnCoolKeyStateChange(keyType, keyID, keyState, data,strData)
+ {
+- // alert("KeyID: " + keyID + "\n" +
+- // "KeyState: " + keyState + "\n" +
+- // "Data: " + data);
++ //alert("KeyID: " + keyID + "\n" +
++ // "KeyState: " + keyState + "\n" +
++ // "Data: " + data);
+ //alert("State Change ="+keyState);
+
+-
+ switch(keyState)
+ {
+ case 1000: // KeyInserted
+@@ -4804,3 +4791,8 @@ function GetESCLogPathName(aName)
+
+
+ }
++
++function TraySendNotificationMessage(aTitle,aMessage,aSeverity,aTimeout,aIcon)
++{
++ //alert(aMessage);
++}
+diff -up ./esc/src/app/xul/esc/chrome/content/esc/esc.xul.fix1 ./esc/src/app/xul/esc/chrome/content/esc/esc.xul
+--- ./esc/src/app/xul/esc/chrome/content/esc/esc.xul.fix1 2017-07-24 16:46:36.000000000 -0700
++++ ./esc/src/app/xul/esc/chrome/content/esc/esc.xul 2018-04-26 11:44:38.433986216 -0700
+@@ -30,7 +30,6 @@
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+ <stringbundle id="esc_strings" src="chrome://esc/locale/esc.properties"/>
+- <script src= "TRAY.js"/>
+ <script src="ESC.js"/>
+ <vbox flex ="1" >
+ <hbox class="logoBox" >
+diff -up ./esc/src/app/xul/esc/chrome/content/esc/hiddenWindow.xul.fix1 ./esc/src/app/xul/esc/chrome/content/esc/hiddenWindow.xul
+--- ./esc/src/app/xul/esc/chrome/content/esc/hiddenWindow.xul.fix1 2017-07-24 16:46:36.000000000 -0700
++++ ./esc/src/app/xul/esc/chrome/content/esc/hiddenWindow.xul 2018-04-26 11:44:38.434986210 -0700
+@@ -21,6 +21,5 @@
+ onload="hiddenWindowStartup();"
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+ <stringbundle id="esc_strings" src="chrome://esc/locale/esc.properties"/>
+-<script src="TRAY.js"/>
+ <script src="ESC.js"/>
+ </window>
+diff -up ./esc/src/app/xul/esc/chrome/content/esc/security.xul.fix1 ./esc/src/app/xul/esc/chrome/content/esc/security.xul
+--- ./esc/src/app/xul/esc/chrome/content/esc/security.xul.fix1 2017-07-24 16:46:36.000000000 -0700
++++ ./esc/src/app/xul/esc/chrome/content/esc/security.xul 2018-04-26 11:44:38.434986210 -0700
+@@ -31,7 +31,6 @@
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+ <stringbundle id="esc_strings" src="chrome://esc/locale/esc.properties"/>
+- <script src= "TRAY.js"/>
+ <script src="ESC.js"/>
+
+ <groupbox flex="1">
+diff -up ./esc/src/app/xul/esc/chrome/content/esc/settings.xul.fix1 ./esc/src/app/xul/esc/chrome/content/esc/settings.xul
+--- ./esc/src/app/xul/esc/chrome/content/esc/settings.xul.fix1 2017-07-24 16:46:36.000000000 -0700
++++ ./esc/src/app/xul/esc/chrome/content/esc/settings.xul 2018-04-26 11:44:38.435986204 -0700
+@@ -32,7 +32,6 @@
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+ <stringbundle id="esc_strings" src="chrome://esc/locale/esc.properties"/>
+- <script src="TRAY.js"/>
+ <script src="ESC.js"/>
+ <tabbox id="tablist" hidden="true">
+ <tabs>
+diff -up ./esc/src/lib/coolkey/cky_applet.c.fix1 ./esc/src/lib/coolkey/cky_applet.c
+--- ./esc/src/lib/coolkey/cky_applet.c.fix1 2018-04-26 11:44:38.436986198 -0700
++++ ./esc/src/lib/coolkey/cky_applet.c 2018-04-26 11:44:38.436986198 -0700
+@@ -0,0 +1,2119 @@
++/* ***** BEGIN COPYRIGHT BLOCK *****
++ * Copyright (C) 2005 Red Hat, Inc.
++ * All rights reserved.
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation version
++ * 2.1 of the License.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
++ * ***** END COPYRIGHT BLOCK ***** */
++
++#include <stdio.h>
++#include "cky_applet.h"
++#include <string.h>
++
++#define MIN(x, y) ((x) < (y) ? (x) : (y))
++
++/*****************************************************************
++ *
++ * Generic factorys are used by the generic APDU processing
++ * to customize the formatting of APDU. Typically APDUs are formatted
++ * using parameterized calls of the form CKYAPDUFactory_ADPUNAME.
++ * The generic processing code, however needs calls with a common
++ * Signature. To accomplish the conversion, we build generic versions
++ * which take a void * parameter. Trivial APDU's can pass NULL or a pointer
++ * to the single parameter that they need. More complicated APDU's use
++ * CKYAppletArg* data structures defined above to pass more arguments.
++ *
++ * Generic factorys then call the standard CKYAPDUFactor_ADPUNAME() functions
++ * to build the APDUs. These functions are intended only as arguments
++ * to the generic ADPU calls, and not to be called directly.
++ *
++ *****************************************************************/
++CKYStatus
++CKYAppletFactory_SelectFile(CKYAPDU *apdu, const void *param)
++{
++ return CKYAPDUFactory_SelectFile(apdu, 4, 0, (const CKYBuffer *)param);
++}
++
++CKYStatus
++CACAppletFactory_SelectFile(CKYAPDU *apdu, const void *param)
++{
++ return CKYAPDUFactory_SelectFile(apdu, 2, 12, (const CKYBuffer *)param);
++}
++
++CKYStatus
++P15AppletFactory_SelectFile(CKYAPDU *apdu, const void *param)
++{
++ return CKYAPDUFactory_SelectFile(apdu, 0, 0, (const CKYBuffer *)param);
++}
++
++CKYStatus
++CKYAppletFactory_SelectCardManager(CKYAPDU *apdu, const void *param)
++{
++ return CKYAPDUFactory_SelectCardManager(apdu);
++}
++
++CKYStatus
++CKYAppletFactory_GetCPLCData(CKYAPDU *apdu, const void *param)
++{
++ return CKYAPDUFactory_GetCPLCData(apdu);
++}
++
++CKYStatus
++CKYAppletFactory_ListKeys(CKYAPDU *apdu, const void *param)
++{
++ return CKYAPDUFactory_ListKeys(apdu, *( CKYByte *)param);
++}
++
++CKYStatus
++CKYAppletFactory_ComputeCryptInit(CKYAPDU *apdu, const void *param)
++{
++ const CKYAppletArgComputeCrypt *ccs=(const CKYAppletArgComputeCrypt *)param;
++ return CKYAPDUFactory_ComputeCryptInit(apdu, ccs->keyNumber, ccs->mode,
++ ccs->direction, ccs->location);
++
++}
++
++CKYStatus
++CKYAppletFactory_ComputeCryptProcess(CKYAPDU *apdu, const void *param)
++{
++ const CKYAppletArgComputeCrypt *ccs=(const CKYAppletArgComputeCrypt *)param;
++ return CKYAPDUFactory_ComputeCryptProcess(apdu, ccs->keyNumber,
++ ccs->location, ccs->data);
++
++}
++
++CKYStatus
++CKYAppletFactory_ComputeCryptFinal(CKYAPDU *apdu, const void *param)
++{
++ const CKYAppletArgComputeCrypt *ccs=(const CKYAppletArgComputeCrypt *)param;
++ return CKYAPDUFactory_ComputeCryptFinal(apdu, ccs->keyNumber,
++ ccs->location, ccs->data, ccs->sig);
++}
++
++CKYStatus
++CKYAppletFactory_ComputeCryptOneStep(CKYAPDU *apdu, const void *param)
++{
++ const CKYAppletArgComputeCrypt *ccs=(const CKYAppletArgComputeCrypt *)param;
++ return CKYAPDUFactory_ComputeCryptOneStep(apdu, ccs->keyNumber,ccs->mode,
++ ccs->direction, ccs->location, ccs->data, ccs->sig);
++}
++
++CKYStatus
++CKYAppletFactory_ComputeECCSignatureOneStep(CKYAPDU *apdu, const void *param)
++{
++ const CKYAppletArgComputeECCSignature *ccs=(const CKYAppletArgComputeECCSignature *)param;
++ return CKYAPDUFactory_ComputeECCSignatureOneStep(apdu, ccs->keyNumber,
++ ccs->location, ccs->data, ccs->sig);
++}
++
++CKYStatus
++CKYAppletFactory_ComputeECCKeyAgreementOneStep(CKYAPDU *apdu, const void *param)
++{
++
++ const CKYAppletArgComputeECCKeyAgreement *ccs=(const CKYAppletArgComputeECCKeyAgreement *)param;
++ return CKYAPDUFactory_ComputeECCKeyAgreementOneStep(apdu, ccs->keyNumber, ccs->location, ccs->publicValue, ccs->secretKey);
++}
++
++CKYStatus
++CKYAppletFactory_CreatePIN(CKYAPDU *apdu, const void *param)
++{
++ const CKYAppletArgCreatePIN *cps = (const CKYAppletArgCreatePIN *)param;
++ return CKYAPDUFactory_CreatePIN(apdu, cps->pinNumber, cps->maxAttempts,
++ cps->pinValue);
++}
++
++CKYStatus
++CKYAppletFactory_VerifyPIN(CKYAPDU *apdu, const void *param)
++{
++ const CKYAppletArgVerifyPIN *vps = (const CKYAppletArgVerifyPIN *)param;
++ return CKYAPDUFactory_VerifyPIN(apdu, vps->pinNumber, vps->pinValue);
++}
++
++CKYStatus
++CKYAppletFactory_ChangePIN(CKYAPDU *apdu, const void *param)
++{
++ const CKYAppletArgChangePIN *cps = (const CKYAppletArgChangePIN *)param;
++ return CKYAPDUFactory_ChangePIN(apdu, cps->pinNumber, cps->oldPin,
++ cps->newPin);
++}
++
++CKYStatus
++CKYAppletFactory_ListPINs(CKYAPDU *apdu, const void *param)
++{
++ return CKYAPDUFactory_ListPINs(apdu);
++}
++
++CKYStatus
++CKYAppletFactory_Logout(CKYAPDU *apdu, const void *param)
++{
++ return CKYAPDUFactory_Logout(apdu, *(const CKYByte *)param);
++}
++
++/* Future add WriteObject */
++
++CKYStatus
++CKYAppletFactory_WriteObject(CKYAPDU *apdu, const void *param)
++{
++ const CKYAppletArgWriteObject *wos = (const CKYAppletArgWriteObject *)param;
++ return CKYAPDUFactory_WriteObject(apdu,wos->objectID,wos->offset,wos->size,wos->data);
++}
++
++CKYStatus
++CKYAppletFactory_CreateObject(CKYAPDU *apdu, const void *param)
++{
++ const CKYAppletArgCreateObject *cos=(const CKYAppletArgCreateObject *)param;
++ return CKYAPDUFactory_CreateObject(apdu, cos->objectID, cos->size,
++ cos->readACL, cos->writeACL, cos->deleteACL);
++}
++
++CKYStatus
++CKYAppletFactory_DeleteObject(CKYAPDU *apdu, const void *param)
++{
++ const CKYAppletArgDeleteObject *dos=(const CKYAppletArgDeleteObject *)param;
++ return CKYAPDUFactory_DeleteObject(apdu, dos->objectID, dos->zero);
++
++}
++
++CKYStatus
++CKYAppletFactory_ReadObject(CKYAPDU *apdu, const void *param)
++{
++ const CKYAppletArgReadObject *ros = (const CKYAppletArgReadObject *)param;
++ return CKYAPDUFactory_ReadObject(apdu, ros->objectID,
++ ros->offset, ros->size);
++}
++
++CKYStatus
++CKYAppletFactory_ListObjects(CKYAPDU *apdu, const void *param)
++{
++ return CKYAPDUFactory_ListObjects(apdu, *(const CKYByte *)param);
++}
++
++CKYStatus
++CKYAppletFactory_GetStatus(CKYAPDU *apdu, const void *param)
++{
++ return CKYAPDUFactory_GetStatus(apdu);
++}
++
++CKYStatus
++CKYAppletFactory_Noop(CKYAPDU *apdu, const void *param)
++{
++ return CKYAPDUFactory_Noop(apdu);
++}
++
++CKYStatus
++CKYAppletFactory_GetBuildID(CKYAPDU *apdu, const void *param)
++{
++ return CKYAPDUFactory_GetBuildID(apdu);
++}
++
++CKYStatus
++CKYAppletFactory_GetLifeCycle(CKYAPDU *apdu, const void *param)
++{
++ return CKYAPDUFactory_GetLifeCycle(apdu);
++}
++
++CKYStatus
++CKYAppletFactory_GetLifeCycleV2(CKYAPDU *apdu, const void *param)
++{
++ return CKYAPDUFactory_GetLifeCycleV2(apdu);
++}
++CKYStatus
++CKYAppletFactory_GetRandom(CKYAPDU *apdu, const void *param)
++{
++ return CKYAPDUFactory_GetRandom(apdu, *(CKYByte *)param);
++}
++
++CKYStatus
++CKYAppletFactory_SeedRandom(CKYAPDU *apdu, const void *param)
++{
++ const CKYBuffer *buf=(CKYBuffer *)param;
++ return CKYAPDUFactory_SeedRandom(apdu, buf);
++}
++
++CKYStatus
++CKYAppletFactory_GetIssuerInfo(CKYAPDU *apdu, const void *param)
++{
++ return CKYAPDUFactory_GetIssuerInfo(apdu);
++}
++
++CKYStatus
++CKYAppletFactory_GetBuiltinACL(CKYAPDU *apdu, const void *param)
++{
++ return CKYAPDUFactory_GetBuiltinACL(apdu);
++}
++
++CKYStatus
++CACAppletFactory_SignDecryptStep(CKYAPDU *apdu, const void *param)
++{
++ const CKYBuffer *buf=(CKYBuffer *)param;
++ return CACAPDUFactory_SignDecrypt(apdu, CAC_P1_STEP, buf);
++}
++
++CKYStatus
++CACAppletFactory_SignDecryptFinal(CKYAPDU *apdu, const void *param)
++{
++ const CKYBuffer *buf=(CKYBuffer *)param;
++ return CACAPDUFactory_SignDecrypt(apdu, CAC_P1_FINAL, buf);
++}
++
++CKYStatus
++PIVAppletFactory_SignDecrypt(CKYAPDU *apdu, const void *param)
++{
++ const PIVAppletArgSignDecrypt *psd = (const PIVAppletArgSignDecrypt *)param;
++ return PIVAPDUFactory_SignDecrypt(apdu, psd->chain, psd->alg, psd->key,
++ psd->len, psd->buf);
++}
++
++CKYStatus
++P15AppletFactory_VerifyPIN(CKYAPDU *apdu, const void *param)
++{
++ const P15AppletArgVerifyPIN *vps = (const P15AppletArgVerifyPIN *)param;
++ return P15APDUFactory_VerifyPIN(apdu, vps->pinRef, vps->pinVal);
++}
++
++CKYStatus
++CACAppletFactory_GetCertificate(CKYAPDU *apdu, const void *param)
++{
++ CKYSize *size=(CKYSize*)param;
++ return CACAPDUFactory_GetCertificate(apdu, *size);
++}
++
++CKYStatus
++PIVAppletFactory_GetCertificate(CKYAPDU *apdu, const void *param)
++{
++ CKYBuffer *tag =(CKYBuffer*)param;
++ return PIVAPDUFactory_GetData(apdu, tag, 0);
++}
++
++CKYStatus
++CACAppletFactory_ReadFile(CKYAPDU *apdu, const void *param)
++{
++ const CACAppletArgReadFile *rfs = (const CACAppletArgReadFile *)param;
++ return CACAPDUFactory_ReadFile(apdu, rfs->offset, rfs->type, rfs->count);
++}
++
++CKYStatus
++CACAppletFactory_GetProperties(CKYAPDU *apdu, const void *param)
++{
++ return CACAPDUFactory_GetProperties(apdu);
++}
++
++/*
++ * deprecates 0.x functions
++ */
++CKYStatus
++CKYAppletFactory_LogoutAllV0(CKYAPDU *apdu, const void *param)
++{
++ CKYByte data[2] = { 0, 0};
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_COOLKEY);
++ CKYAPDU_SetINS(apdu, CKY_INS_LOGOUT_ALL);
++ CKYAPDU_SetP1(apdu, 0x00);
++ CKYAPDU_SetP2(apdu, 0x00);
++ return CKYAPDU_SetSendData(apdu, data, sizeof(data));
++}
++
++CKYStatus
++P15AppletFactory_ReadRecord(CKYAPDU *apdu, const void *param)
++{
++ const P15AppletArgReadRecord *rrs = (const P15AppletArgReadRecord *)param;
++ return P15APDUFactory_ReadRecord(apdu, rrs->record,
++ rrs->short_ef, rrs->flags, rrs->size);
++}
++
++CKYStatus
++P15AppletFactory_ReadBinary(CKYAPDU *apdu, const void *param)
++{
++ const P15AppletArgReadBinary *res = (const P15AppletArgReadBinary *)param;
++ return P15APDUFactory_ReadBinary(apdu, res->offset,
++ res->short_ef, res->flags, res->size);
++}
++
++CKYStatus
++P15AppletFactory_ManageSecurityEnvironment(CKYAPDU *apdu, const void *param)
++{
++ const P15AppletArgManageSecurityEnvironment *mse =
++ (const P15AppletArgManageSecurityEnvironment *)param;
++ return P15APDUFactory_ManageSecurityEnvironment(apdu, mse->p1,
++ mse->p2, mse->keyRef);
++}
++
++CKYStatus
++P15AppletFactory_PerformSecurityOperation(CKYAPDU *apdu, const void *param)
++{
++ const P15AppletArgPerformSecurityOperation *pso =
++ (const P15AppletArgPerformSecurityOperation *)param;
++ return P15APDUFactory_PerformSecurityOperation(apdu, pso->dir, pso->chain,
++ pso->retLen, pso->data);
++}
++/*****************************************************************
++ *
++ * Generic Fill routines used by several calls in common
++ * and globally accessible
++ *
++ *****************************************************************/
++
++/* a null fill function for those APDU's which do not return data */
++CKYStatus
++CKYAppletFill_Null(const CKYBuffer *response, CKYSize size, void *param)
++{
++ return CKYSUCCESS;
++}
++
++/* a Buffer Replace fill function for those APDU's which return unformated
++ * chunks of data */
++CKYStatus
++CKYAppletFill_ReplaceBuffer(const CKYBuffer *response, CKYSize size, void *param)
++{
++ CKYBuffer *buf = (CKYBuffer *)param;
++
++ if (buf == NULL) {
++ return CKYSUCCESS;
++ }
++ return CKYBuffer_Replace(buf, 0, CKYBuffer_Data(response),
++ CKYBuffer_Size(response) -2);
++}
++
++/* a Buffer Append fill function. Can be used with any APDU that uses Buffer
++ * Replace. Repeated calls continuously fill the buffer. Most useful for read.
++ */
++CKYStatus
++CKYAppletFill_AppendBuffer(const CKYBuffer *response, CKYSize size, void *param)
++{
++ CKYBuffer *buf = (CKYBuffer *)param;
++
++ return CKYBuffer_AppendData(buf, CKYBuffer_Data(response),
++ CKYBuffer_Size(response) -2);
++}
++
++
++CKYStatus
++CKYAppletFill_Byte(const CKYBuffer *response, CKYSize size, void *param)
++{
++ CKYByte *v = (CKYByte *)param;
++
++ *v = CKYBuffer_GetChar(response, 0);
++ return CKYSUCCESS;
++}
++
++CKYStatus
++CKYAppletFill_Short(const CKYBuffer *response, CKYSize size, void *param)
++{
++ unsigned short *v = (unsigned short *)param;
++
++ *v = CKYBuffer_GetShort(response, 0);
++ return CKYSUCCESS;
++}
++
++CKYStatus
++CKYAppletFill_Long(const CKYBuffer *response, CKYSize size, void *param)
++{
++ unsigned long *v = (unsigned long *)param;
++
++ *v = CKYBuffer_GetLong(response, 0);
++ return CKYSUCCESS;
++}
++
++/*****************************************************************
++ *
++ * Utilities shared by all the fetch Cards.
++ *
++ *****************************************************************/
++/*
++ * verify the we got a successful response. Responses should include
++ * the expected data returned plus a 2 byte return code. This return
++ * code should be 0x9000 on success.
++ */
++CKYBool
++CKYApplet_VerifyResponse(const CKYBuffer *buf, CKYSize dataSize,
++ CKYISOStatus *apduRC) {
++ CKYSize size = CKYBuffer_Size(buf);
++ CKYISOStatus rc = CKYISO_INVRESPONSE;
++ CKYBool valid = 0;
++
++ /* is there enough size for the return code ? */
++ if (size < 2) {
++ goto done;
++ }
++ /* fetch the data */
++ rc = CKYBuffer_GetShort(buf, size-2);
++
++ /* is there enough size for the expected data ? */
++ if ((dataSize != CKY_SIZE_UNKNOWN) && (size != dataSize+2)) {
++ goto done;
++ }
++
++ /* did we return successfully? */
++ valid = (rc == CKYISO_SUCCESS) || ((rc & CKYISO_MORE_MASK) == CKYISO_MORE);
++
++done:
++ if (apduRC) {
++ *apduRC = rc;
++ }
++ return valid;
++}
++
++
++/*
++ * most commands have identical operations. Isolate the differences in
++ * call back functions, and create a generic APDU handler which Creates
++ * APDU's, Does the exchange, and fills in the results.
++ */
++CKYStatus
++CKYApplet_HandleAPDU(CKYCardConnection *conn,
++ CKYAppletFactory afFunc, const void *afArg,
++ const CKYBuffer *nonce, CKYSize size,
++ CKYFillFunction fillFunc, void *fillArg, CKYISOStatus *apduRC)
++{
++ CKYAPDU apdu;
++ CKYBuffer response;
++ CKYStatus ret;
++
++ if (apduRC) {
++ *apduRC = CKYISO_NORESPONSE;
++ }
++
++ /* initialize the response and APDU buffers */
++ CKYBuffer_InitEmpty(&response);
++ ret = CKYAPDU_Init(&apdu);
++ if (ret != CKYSUCCESS) {
++ goto done;
++ }
++
++ /* fill in the APDU buffer with the correct values */
++ ret = (*afFunc)(&apdu, afArg);
++ if (ret != CKYSUCCESS) {
++ goto done;
++ }
++ /* if NONCE supplied, add it to the end of the apdu */
++ if (nonce) {
++ /*
++ * Local Secured commands need the nonce returned from Login to
++ * verify that they are valid. Nonce's are just added to the end
++ * of the APDU much like
++ */
++ ret = CKYAPDU_AppendSendDataBuffer(&apdu, nonce);
++ if (ret != CKYSUCCESS) {
++ goto done;
++ }
++ }
++
++ /* send it to the card */
++ ret = CKYCardConnection_ExchangeAPDU(conn, &apdu, &response);
++ if (ret != CKYSUCCESS) {
++ goto done;
++ }
++
++ /* verify we got the expected response */
++ if (!CKYApplet_VerifyResponse(&response, size, apduRC)) {
++ ret = CKYAPDUFAIL;
++ goto done;
++ }
++
++ /* Fill in our output data structure */
++ ret = (*fillFunc)(&response, size, fillArg);
++done:
++ CKYBuffer_FreeData(&response);
++ CKYAPDU_FreeData(&apdu);
++ return ret;
++}
++
++
++/*****************************************************************
++ *
++ * The following convience functions convert APDU calls
++ * into function calls, with input and output parameters.
++ * The application is still responsible for 1) creating a connection
++ * to the card, 2) Getting a tranaction long, then 3) selecting
++ * the appropriate applet (or Card manager). Except for those
++ * calls that have been noted, the appropriate applet is the CoolKey
++ * applet.
++ *
++ *****************************************************************/
++/*
++ * Select an applet. Must happen after we start a transaction and before
++ * we issue any applet specific command.
++ */
++CKYStatus
++CKYApplet_SelectFile(CKYCardConnection *conn, const CKYBuffer *AID,
++ CKYISOStatus *apduRC)
++{
++ return CKYApplet_HandleAPDU(conn, CKYAppletFactory_SelectFile, AID, NULL,
++ CKY_SIZE_UNKNOWN, CKYAppletFill_Null, NULL, apduRC);
++}
++
++static CKYByte coolkeyid[] = {0x62, 0x76, 0x01, 0xff, 0x00, 0x00, 0x00 };
++/*
++ * Select the CoolKey applet. Must happen after we start a transaction and
++ * before we issue any applet specific command.
++ */
++CKYStatus
++CKYApplet_SelectCoolKeyManager(CKYCardConnection *conn, CKYISOStatus *apduRC)
++{
++ CKYStatus ret;
++ CKYBuffer COOLKEYAID;
++ CKYBuffer_InitFromData(&COOLKEYAID, coolkeyid, sizeof(coolkeyid));
++ ret = CKYApplet_HandleAPDU(conn, CKYAppletFactory_SelectFile, &COOLKEYAID,
++ NULL, 0, CKYAppletFill_Null, NULL, apduRC);
++ CKYBuffer_FreeData(&COOLKEYAID);
++ return ret;
++}
++
++static CKYByte CACPKIid[] = { 0xa0, 0x00, 0x00, 0x00, 0x79, 0x01 };
++/*
++ * Select the CoolKey applet. Must happen after we start a transaction and
++ * before we issue any applet specific command.
++ */
++CKYStatus
++CACApplet_SelectPKI(CKYCardConnection *conn, CKYBuffer *cacAID,
++ CKYByte instance, CKYISOStatus *apduRC)
++{
++ CKYStatus ret;
++ CKYBuffer_AppendData(cacAID, CACPKIid, sizeof(CACPKIid));
++ CKYBuffer_AppendChar(cacAID, instance);
++ ret = CKYApplet_HandleAPDU(conn, CKYAppletFactory_SelectFile, cacAID,
++ NULL, CKY_SIZE_UNKNOWN, CKYAppletFill_Null, NULL, apduRC);
++ if (ret != CKYSUCCESS) {
++ CKYBuffer_Resize(cacAID, 0);
++ }
++ return ret;
++}
++
++/*
++ * Select the card manager. Must happen after we start a transaction and before
++ * we issue any card manager commands.
++ */
++CKYStatus
++CKYApplet_SelectCardManager(CKYCardConnection *conn, CKYISOStatus *apduRC)
++{
++ return CKYApplet_HandleAPDU(conn, CKYAppletFactory_SelectCardManager, NULL,
++ NULL, CKY_SIZE_UNKNOWN, CKYAppletFill_Null, NULL, apduRC);
++}
++
++static CKYByte cacmgrid[] = {0xa0, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00 };
++CKYStatus
++CACApplet_SelectCardManager(CKYCardConnection *conn, CKYISOStatus *apduRC)
++{
++ CKYStatus ret;
++ CKYBuffer CAC_CM_AID;
++ CKYBuffer_InitFromData(&CAC_CM_AID, cacmgrid, sizeof(cacmgrid));
++ ret = CKYApplet_HandleAPDU(conn, CKYAppletFactory_SelectFile, &CAC_CM_AID,
++ NULL, CKY_SIZE_UNKNOWN, CKYAppletFill_Null, NULL, apduRC);
++ CKYBuffer_FreeData(&CAC_CM_AID);
++ return ret;
++}
++
++static CKYByte cacCCCid[] = {0xa0, 0x00, 0x00, 0x01, 0x16, 0xdb, 0x00 };
++CKYStatus
++CACApplet_SelectCCC(CKYCardConnection *conn, CKYISOStatus *apduRC)
++{
++ CKYStatus ret;
++ CKYBuffer CAC_CM_AID;
++ CKYBuffer_InitFromData(&CAC_CM_AID, cacCCCid, sizeof(cacCCCid));
++ ret = CKYApplet_HandleAPDU(conn, CKYAppletFactory_SelectFile, &CAC_CM_AID,
++ NULL, CKY_SIZE_UNKNOWN, CKYAppletFill_Null, NULL, apduRC);
++ CKYBuffer_FreeData(&CAC_CM_AID);
++ return ret;
++}
++
++CKYStatus
++CACApplet_SelectFile(CKYCardConnection *conn, unsigned short ef,
++ CKYISOStatus *apduRC)
++{
++ CKYStatus ret;
++ CKYBuffer efBuf;
++ CKYBuffer_InitEmpty(&efBuf);
++ CKYBuffer_AppendShortLE(&efBuf, ef);
++ ret = CKYApplet_HandleAPDU(conn, CACAppletFactory_SelectFile, &efBuf,
++ NULL, CKY_SIZE_UNKNOWN, CKYAppletFill_Null, NULL, apduRC);
++ CKYBuffer_FreeData(&efBuf);
++ return ret;
++}
++
++/*
++ * GetCPLC cluster -- must be called with CM selected
++ */
++static CKYStatus
++ckyAppletFill_GetCPLCData(const CKYBuffer *response, CKYSize size, void *param)
++{
++ CKYAppletRespGetCPLCData *gcdp = (CKYAppletRespGetCPLCData *)param;
++
++ gcdp->CPLCtag = CKYBuffer_GetShort(response, 0);
++ gcdp->length = CKYBuffer_GetChar(response, 2);
++ gcdp->fabricator = CKYBuffer_GetShort(response, 3);
++ gcdp->romType = CKYBuffer_GetShort(response, 5);
++ gcdp->romOSID = CKYBuffer_GetShort(response, 7);
++ gcdp->romOSDate = CKYBuffer_GetShort(response, 9);
++ gcdp->romOSLevel = CKYBuffer_GetShort(response, 11);
++ gcdp->eepromFabricationDate = CKYBuffer_GetShort(response, 13);
++ gcdp->eepromSerialNumber = CKYBuffer_GetLong(response, 15);
++ gcdp->eepromBatchID = CKYBuffer_GetShort(response, 19);
++ gcdp->eepromModuleFabricator = CKYBuffer_GetShort(response, 21);
++ gcdp->eepromModuleDate = CKYBuffer_GetShort(response, 23);
++ gcdp->eepromICManufacturer = CKYBuffer_GetShort(response, 25);
++ gcdp->eepromEmbeddingDate = CKYBuffer_GetShort(response, 27);
++ gcdp->eepromPrePersonalizer = CKYBuffer_GetShort(response, 29);
++ gcdp->eepromPrePersonalizeDate = CKYBuffer_GetShort(response, 31);
++ gcdp->eepromPrePersonalizeID = CKYBuffer_GetLong(response, 33);
++ gcdp->eepromPersonalizer = CKYBuffer_GetShort(response, 37);
++ gcdp->eepromPersonalizeDate = CKYBuffer_GetShort(response, 39);
++ gcdp->eepromPersonalizeID = CKYBuffer_GetLong(response, 41);
++ return CKYSUCCESS;
++}
++
++CKYStatus
++CKYApplet_GetCPLCData(CKYCardConnection *conn, CKYAppletRespGetCPLCData *cplc,
++ CKYISOStatus *apduRC)
++{
++ return CKYApplet_HandleAPDU(conn, CKYAppletFactory_GetCPLCData, NULL, NULL,
++ CKY_SIZE_GET_CPLCDATA, ckyAppletFill_GetCPLCData, cplc, apduRC);
++}
++
++/*
++ * Get CUID. The CUID exists in the CPLC data. We use the same basic
++ * APDU, but use a differ fill function to collect it.
++ */
++static CKYStatus
++ckyAppletFill_GetCUID(const CKYBuffer *response, CKYSize size, void *param)
++{
++ CKYBuffer *cuid = (CKYBuffer *)param;
++ CKYStatus ret;
++
++ ret = CKYBuffer_Resize(cuid,10);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ /* fabricator 2 bytes */
++ CKYBuffer_SetChar(cuid, 0, CKYBuffer_GetChar(response, 3));
++ CKYBuffer_SetChar(cuid, 1, CKYBuffer_GetChar(response, 4));
++ /* IC Type 2 bytes */
++ CKYBuffer_SetChar(cuid, 2, CKYBuffer_GetChar(response, 5));
++ CKYBuffer_SetChar(cuid, 3, CKYBuffer_GetChar(response, 6));
++ /* Batch ID 2 bytes */
++ CKYBuffer_SetChar(cuid, 4, CKYBuffer_GetChar(response, 19));
++ CKYBuffer_SetChar(cuid, 5, CKYBuffer_GetChar(response, 20));
++ /* IC Serial Number 4 bytes */
++ CKYBuffer_SetChar(cuid, 6, CKYBuffer_GetChar(response, 15));
++ CKYBuffer_SetChar(cuid, 7, CKYBuffer_GetChar(response, 16));
++ CKYBuffer_SetChar(cuid, 8, CKYBuffer_GetChar(response, 17));
++ CKYBuffer_SetChar(cuid, 9, CKYBuffer_GetChar(response, 18));
++ return CKYSUCCESS;
++}
++
++CKYStatus
++CKYApplet_GetCUID(CKYCardConnection *conn, CKYBuffer *cuid, CKYISOStatus *apduRC)
++{
++ return CKYApplet_HandleAPDU(conn, CKYAppletFactory_GetCPLCData, NULL, NULL,
++ CKY_SIZE_GET_CPLCDATA, ckyAppletFill_GetCUID, cuid, apduRC);
++}
++
++/*
++ * Get MSN. The MSN exists in the CPLC data. We use the same basic
++ * APDU, but use a differ fill function to collect it.
++ */
++static CKYStatus
++ckyAppletFill_GetMSN(const CKYBuffer *response, CKYSize size, void *param)
++{
++ unsigned long *msn = (unsigned long *)param;
++ *msn = CKYBuffer_GetLong(response, 41);
++
++ return CKYSUCCESS;
++}
++
++CKYStatus
++CKYApplet_GetMSN(CKYCardConnection *conn, unsigned long *msn,
++ CKYISOStatus *apduRC)
++{
++ return CKYApplet_HandleAPDU(conn, CKYAppletFactory_GetCPLCData, NULL, NULL,
++ CKY_SIZE_GET_CPLCDATA, ckyAppletFill_GetMSN, msn, apduRC);
++}
++
++/*
++ * ListKeys cluster
++ */
++static CKYStatus
++ckyAppletFill_ListKeys(const CKYBuffer *response, CKYSize size, void *param)
++{
++ CKYAppletRespListKeys *lkp = (CKYAppletRespListKeys *)param;
++
++ lkp->keyNum = CKYBuffer_GetChar(response, 0);
++ lkp->keyType = CKYBuffer_GetChar(response, 1);
++ lkp->keyPartner = CKYBuffer_GetChar(response, 2);
++ lkp->keySize = CKYBuffer_GetShort(response, 3);
++ lkp->readACL = CKYBuffer_GetShort(response, 5);
++ lkp->writeACL = CKYBuffer_GetShort(response, 7);
++ lkp->useACL = CKYBuffer_GetShort(response, 9);
++ return CKYSUCCESS;
++}
++
++CKYStatus
++CKYApplet_ListKeys(CKYCardConnection *conn, CKYByte seq,
++ CKYAppletRespListKeys *lkp, CKYISOStatus *apduRC)
++{
++ return CKYApplet_HandleAPDU(conn, CKYAppletFactory_ListKeys, &seq, NULL,
++ CKY_SIZE_LIST_KEYS, ckyAppletFill_ListKeys, lkp, apduRC);
++}
++
++/*
++ * Compute Crypt Cluster.
++ *
++ * Compute Crypt takes 3 types: Init, Process, Final.
++ *
++ */
++CKYStatus
++CKYApplet_ComputeCryptInit(CKYCardConnection *conn, CKYByte keyNumber,
++ CKYByte mode, CKYByte direction, CKYByte location,
++ const CKYBuffer *nonce, CKYISOStatus *apduRC)
++{
++ CKYAppletArgComputeCrypt ccd;
++ ccd.keyNumber = keyNumber;
++ ccd.mode = mode;
++ ccd.direction = direction;
++ ccd.location = location;
++ return CKYApplet_HandleAPDU(conn, CKYAppletFactory_ComputeCryptInit, &ccd,
++ nonce, 0, CKYAppletFill_Null, NULL, apduRC);
++}
++
++CKYStatus
++CKYApplet_ComputeCryptProcess(CKYCardConnection *conn, CKYByte keyNumber,
++ CKYByte location, const CKYBuffer *data,
++ const CKYBuffer *nonce, CKYISOStatus *apduRC)
++{
++ CKYAppletArgComputeCrypt ccd;
++ ccd.keyNumber = keyNumber;
++ ccd.location = location;
++ ccd.data = data;
++ return CKYApplet_HandleAPDU(conn, CKYAppletFactory_ComputeCryptProcess,
++ &ccd, nonce, 0, CKYAppletFill_Null, NULL, apduRC);
++}
++
++/* computeECCValue returns data in the form :
++ * len: short
++ * data: byte[len]
++ * This fill routine returns A buffer with a copy of data and a length of len */
++static CKYStatus
++ckyAppletFill_ComputeECCValueFinal(const CKYBuffer *response,
++ CKYSize size, void *param)
++{
++ CKYBuffer *cbuf = (CKYBuffer *)param;
++ CKYSize respSize = CKYBuffer_Size(response);
++ CKYSize dataLen;
++
++ if (cbuf == 0) {
++ return CKYSUCCESS; /* app didn't want the result */
++ }
++ /* data response code + length code */
++ if (respSize < 4) {
++ return CKYAPDUFAIL;
++ }
++ dataLen = CKYBuffer_GetShort(response, 0);
++ if (dataLen > (respSize-4)) {
++ return CKYAPDUFAIL;
++ }
++ return CKYBuffer_Replace(cbuf, 0, CKYBuffer_Data(response)+2, dataLen);
++}
++
++/* computeCrypt returns data in the form :
++ * len: short
++ * data: byte[len]
++ * This fill routine returns A buffer with a copy of data and a length of len */
++static CKYStatus
++ckyAppletFill_ComputeCryptFinal(const CKYBuffer *response,
++ CKYSize size, void *param)
++{
++ CKYBuffer *cbuf = (CKYBuffer *)param;
++ CKYSize respSize = CKYBuffer_Size(response);
++ CKYSize dataLen;
++
++ if (cbuf == 0) {
++ return CKYSUCCESS; /* app didn't want the result */
++ }
++ /* data response code + length code */
++ if (respSize < 4) {
++ return CKYAPDUFAIL;
++ }
++ dataLen = CKYBuffer_GetShort(response, 0);
++ if (dataLen > (respSize-4)) {
++ return CKYAPDUFAIL;
++ }
++ return CKYBuffer_Replace(cbuf, 0, CKYBuffer_Data(response)+2, dataLen);
++}
++
++CKYStatus
++CKYApplet_ComputeCryptFinal(CKYCardConnection *conn, CKYByte keyNumber,
++ CKYByte location, const CKYBuffer *data, CKYBuffer *sig, CKYBuffer *result,
++ const CKYBuffer *nonce, CKYISOStatus *apduRC)
++{
++ CKYAppletArgComputeCrypt ccd;
++ ccd.keyNumber = keyNumber;
++ ccd.location = location;
++ ccd.data = data;
++ ccd.data = sig;
++ return CKYApplet_HandleAPDU(conn, CKYAppletFactory_ComputeCryptFinal, &ccd,
++ nonce, CKY_SIZE_UNKNOWN, ckyAppletFill_ComputeCryptFinal, result, apduRC);
++}
++
++/*
++ * do a complete ComputeCrypt operation
++ * ...look to data size to see if we should read/write the data to
++ * the on card buffer. (future)
++ */
++CKYStatus
++CKYApplet_ComputeCrypt(CKYCardConnection *conn, CKYByte keyNumber,
++ CKYByte mode, CKYByte direction, const CKYBuffer *data, CKYBuffer *sig,
++ CKYBuffer *result, const CKYBuffer *nonce, CKYISOStatus *apduRC)
++{
++ CKYStatus ret;
++ CKYAppletArgComputeCrypt ccd;
++ CKYBuffer empty;
++ CKYISOStatus status;
++ short dataSize = 0;
++ int use2APDUs = 0;
++ int use_dl_object = CKYBuffer_Size(data) > 200 ;
++
++ CKYBuffer_InitEmpty(&empty);
++ ccd.keyNumber = keyNumber;
++ ccd.mode = mode;
++ ccd.direction = direction;
++ ccd.location = use_dl_object ? CKY_DL_OBJECT : CKY_DL_APDU;
++
++ if (!apduRC)
++ apduRC = &status;
++
++ if (use_dl_object) {
++ CKYBuffer sizeBuf;
++
++ CKYBuffer_InitEmpty(&sizeBuf);
++ CKYBuffer_AppendShort(&sizeBuf, CKYBuffer_Size(data));
++
++ ret = CKYApplet_WriteObjectFull(conn, 0xffffffff,
++ 0, CKYBuffer_Size(&sizeBuf), nonce,
++ &sizeBuf, apduRC);
++
++ CKYBuffer_FreeData(&sizeBuf);
++ if( ret != CKYSUCCESS)
++ goto fail;
++
++ ret = CKYApplet_WriteObjectFull(conn, 0xffffffff,
++ 2, CKYBuffer_Size(data), nonce,
++ data, apduRC);
++
++ if(ret != CKYSUCCESS)
++ goto fail;
++ }
++
++ if (mode == CKY_RSA_NO_PAD) {
++ ccd.data = use_dl_object ? &empty : data;
++ ccd.sig = sig;
++ ret = CKYApplet_HandleAPDU(conn,
++ CKYAppletFactory_ComputeCryptOneStep, &ccd, nonce,
++ CKY_SIZE_UNKNOWN, ckyAppletFill_ComputeCryptFinal,
++ use_dl_object ? NULL : result, apduRC);
++ if (ret == CKYAPDUFAIL && *apduRC == CKYISO_INCORRECT_P2) {
++ use2APDUs = 1; /* maybe it's an old applet */
++ }
++ } else {
++ use2APDUs = 1;
++ }
++ if (use2APDUs) {
++ /* future, if data is to big write it to the internal object
++ * and set location to DL_OBJECT */
++ ccd.data = ∅
++ ccd.sig = sig;
++
++ ret = CKYApplet_HandleAPDU(conn,
++ CKYAppletFactory_ComputeCryptInit, &ccd, nonce,
++ 0, CKYAppletFill_Null, NULL, apduRC);
++ if (ret == CKYSUCCESS) {
++ ccd.data = use_dl_object ? &empty : data;
++ ret = CKYApplet_HandleAPDU(conn,
++ CKYAppletFactory_ComputeCryptFinal, &ccd, nonce,
++ CKY_SIZE_UNKNOWN, ckyAppletFill_ComputeCryptFinal,
++ use_dl_object ? NULL : result, apduRC);
++ }
++ }
++
++ if (use_dl_object && ret == CKYSUCCESS) {
++ CKYBuffer sizeOutBuf;
++ CKYBuffer_InitEmpty(&sizeOutBuf);
++
++ ret = CKYApplet_ReadObjectFull(conn,0xffffffff,
++ 0, 2,
++ nonce,&sizeOutBuf,apduRC);
++
++ if(ret != CKYSUCCESS) {
++ CKYBuffer_FreeData(&sizeOutBuf);
++ goto fail;
++ }
++
++ dataSize = CKYBuffer_GetShort(&sizeOutBuf, 0);
++
++ CKYBuffer_FreeData(&sizeOutBuf);
++
++ ret = CKYApplet_ReadObjectFull(conn,0xffffffff,
++ 2, dataSize,
++ nonce,result,apduRC);
++ }
++
++fail:
++
++ return ret;
++}
++
++CKYStatus
++CKYApplet_ComputeECCKeyAgreement(CKYCardConnection *conn, CKYByte keyNumber,
++ const CKYBuffer *publicValue, CKYBuffer *sharedSecret,
++ CKYBuffer *result, const CKYBuffer *nonce, CKYISOStatus *apduRC)
++{
++ CKYStatus ret = CKYAPDUFAIL;
++ CKYAppletArgComputeECCKeyAgreement ccd;
++ CKYBuffer empty;
++ CKYISOStatus status;
++ /* Routine creates a sym key, should easily fit in one apdu */
++
++ CKYBuffer_InitEmpty(&empty);
++ ccd.keyNumber = keyNumber;
++ ccd.location = CKY_DL_APDU;
++
++ if (!apduRC)
++ apduRC = &status;
++
++ if (ccd.location == CKY_DL_APDU) {
++ ccd.publicValue = publicValue;
++ ccd.secretKey = sharedSecret;
++ ret = CKYApplet_HandleAPDU(conn,
++ CKYAppletFactory_ComputeECCKeyAgreementOneStep, &ccd, nonce,
++ CKY_SIZE_UNKNOWN, ckyAppletFill_ComputeECCValueFinal,
++ result, apduRC);
++ if (ret == CKYAPDUFAIL && *apduRC == CKYISO_INCORRECT_P2) {
++ return ret;
++ }
++ }
++
++ return ret;
++}
++
++CKYStatus
++CKYApplet_ComputeECCSignature(CKYCardConnection *conn, CKYByte keyNumber,
++ const CKYBuffer *data, CKYBuffer *sig,
++ CKYBuffer *result, const CKYBuffer *nonce, CKYISOStatus *apduRC)
++{
++ CKYStatus ret = CKYAPDUFAIL;
++ CKYAppletArgComputeECCSignature ccd;
++ CKYBuffer empty;
++ CKYISOStatus status;
++
++ CKYBuffer_InitEmpty(&empty);
++ ccd.keyNumber = keyNumber;
++
++ /* Assume APDU, the signature can only get so big with our key sizes, ~ 130 for 521 bit key. */
++ ccd.location = CKY_DL_APDU;
++
++ if (!apduRC)
++ apduRC = &status;
++
++ if (ccd.location == CKY_DL_APDU) {
++ ccd.data = data;
++ ccd.sig = sig;
++ ret = CKYApplet_HandleAPDU(conn,
++ CKYAppletFactory_ComputeECCSignatureOneStep, &ccd, nonce,
++ CKY_SIZE_UNKNOWN, ckyAppletFill_ComputeECCValueFinal,
++ result, apduRC);
++ if (ret == CKYAPDUFAIL && *apduRC == CKYISO_INCORRECT_P2) {
++ return ret;
++ }
++
++ }
++
++ return ret;
++}
++
++/*
++ * do a CAC Sign/Decrypt
++ */
++CKYStatus
++CACApplet_SignDecrypt(CKYCardConnection *conn, const CKYBuffer *data,
++ CKYBuffer *result, CKYISOStatus *apduRC)
++{
++ CKYStatus ret;
++ CKYSize dataSize = CKYBuffer_Size(data);
++ CKYOffset offset = 0;
++ CKYBuffer tmp;
++
++ CKYBuffer_InitEmpty(&tmp);
++
++ CKYBuffer_Resize(result, 0);
++ for(offset = 0; (dataSize-offset) > CKY_MAX_WRITE_CHUNK_SIZE;
++ offset += CKY_MAX_WRITE_CHUNK_SIZE) {
++ CKYBuffer_Resize(&tmp,0);
++ CKYBuffer_AppendBuffer(&tmp, data, offset, CKY_MAX_WRITE_CHUNK_SIZE);
++ ret = CKYApplet_HandleAPDU(conn, CACAppletFactory_SignDecryptStep,
++ &tmp, NULL, CKY_SIZE_UNKNOWN,
++ CKYAppletFill_AppendBuffer,
++ result, apduRC);
++ if (ret != CKYSUCCESS) {
++ goto done;
++ }
++ }
++ CKYBuffer_Resize(&tmp,0);
++ CKYBuffer_AppendBuffer(&tmp, data, offset, dataSize - offset);
++ ret = CKYApplet_HandleAPDU(conn, CACAppletFactory_SignDecryptFinal,
++ &tmp, NULL, CKY_SIZE_UNKNOWN,
++ CKYAppletFill_AppendBuffer,
++ result, apduRC);
++
++ if ((ret == CKYSUCCESS) && (CKYBuffer_Size(result) != dataSize)) {
++ /* RSA returns the same data size as input, didn't happen, so
++ * something is wrong. */
++ }
++
++done:
++ CKYBuffer_FreeData(&tmp);
++ return ret;
++}
++
++const P15PinInfo CACPinInfo =
++ { P15PinInitialized|P15PinNeedsPadding, P15PinUTF8, 0, 8, 8, 0, 0xff };
++const P15PinInfo PIVPinInfo =
++ { P15PinLocal|P15PinInitialized|P15PinNeedsPadding,
++ P15PinUTF8, 0, 8, 8, 0, 0xff };
++/*
++ * do a CAC VerifyPIN
++ */
++CKYStatus
++CACApplet_VerifyPIN(CKYCardConnection *conn, const char *pin, int local,
++ CKYISOStatus *apduRC)
++{
++ return P15Applet_VerifyPIN(conn, pin,
++ local ? &PIVPinInfo: &CACPinInfo, apduRC);
++}
++
++
++/*
++ * Get a CAC Certificate
++ */
++CKYStatus
++CACApplet_GetCertificate(CKYCardConnection *conn, CKYBuffer *cert,
++ CKYISOStatus *apduRC)
++{
++ CKYStatus ret;
++ CKYISOStatus status;
++ CKYSize size = 100;
++
++ CKYBuffer_Resize(cert,0);
++ if (apduRC == NULL) {
++ apduRC = &status;
++ }
++
++ ret = CKYApplet_HandleAPDU(conn,
++ CACAppletFactory_GetCertificate, &size, NULL,
++ CKY_SIZE_UNKNOWN, CKYAppletFill_AppendBuffer, cert,
++ apduRC);
++ while ((*apduRC & CKYISO_MORE_MASK) == CKYISO_MORE) {
++ size = *apduRC & ~CKYISO_MORE_MASK;
++ ret = CKYApplet_HandleAPDU(conn,
++ CACAppletFactory_GetCertificate, &size, NULL,
++ CKY_SIZE_UNKNOWN, CKYAppletFill_AppendBuffer, cert,
++ apduRC);
++ }
++ return ret;
++}
++
++/*
++ * Read a CAC Tag/Value file
++ */
++CKYStatus
++CACApplet_ReadFile(CKYCardConnection *conn, CKYByte type, CKYBuffer *buffer,
++ CKYISOStatus *apduRC)
++{
++ CKYStatus ret;
++ CKYISOStatus status;
++ CKYByte maxtransfer;
++ unsigned short offset = 0;
++ unsigned short size;
++ CACAppletArgReadFile rfs;
++
++ CKYBuffer_Resize(buffer,0);
++ if (apduRC == NULL) {
++ apduRC = &status;
++ }
++ rfs.offset = 0;
++ rfs.count = 2;
++ rfs.type = type;
++
++ /* APDU's are expensive, Grab a big chunk of the file first if possible */
++ ret = CKYApplet_HandleAPDU(conn,
++ CACAppletFactory_ReadFile, &rfs, NULL,
++ rfs.count, CKYAppletFill_AppendBuffer,
++ buffer, apduRC);
++ /* file is probably smaller than 100 bytes, get the actual size first */
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ size = CKYBuffer_GetShortLE(buffer, 0) + 2 /* include the length itself */;
++ maxtransfer = CKY_MAX_READ_CHUNK_SIZE;
++ /* get the rest of the buffer if necessary */
++ for (offset = CKYBuffer_Size(buffer); size > offset;
++ offset = CKYBuffer_Size(buffer)) {
++ rfs.offset = offset;
++ rfs.count = MIN(size - offset, maxtransfer);
++ ret = CKYApplet_HandleAPDU(conn,
++ CACAppletFactory_ReadFile, &rfs, NULL,
++ rfs.count, CKYAppletFill_AppendBuffer,
++ buffer, apduRC);
++ if (ret != CKYSUCCESS) {
++ if (*apduRC == CAC_INVALID_PARAMS) {
++ maxtransfer = maxtransfer/2;
++ if (maxtransfer == 0) {
++ return ret;
++ }
++ } else {
++ return ret;
++ }
++ }
++ }
++ return ret;
++}
++
++/*
++ * Select a EF
++ */
++CKYStatus
++P15Applet_SelectFile(CKYCardConnection *conn, unsigned short ef,
++ CKYISOStatus *apduRC)
++{
++ CKYStatus ret;
++ CKYBuffer efBuf;
++ CKYBuffer_InitEmpty(&efBuf);
++ CKYBuffer_AppendShort(&efBuf, ef);
++ ret = CKYApplet_HandleAPDU(conn, P15AppletFactory_SelectFile, &efBuf,
++ NULL, CKY_SIZE_UNKNOWN, CKYAppletFill_Null, NULL, apduRC);
++ CKYBuffer_FreeData(&efBuf);
++ return ret;
++}
++
++CKYStatus
++P15Applet_SelectRootFile(CKYCardConnection *conn, unsigned short ef,
++ CKYISOStatus *apduRC)
++{
++ CKYStatus ret;
++ CKYBuffer efBuf;
++ CKYBuffer_InitEmpty(&efBuf);
++ CKYBuffer_AppendShort(&efBuf, ef);
++ ret = CKYApplet_HandleAPDU(conn, CKYAppletFactory_SelectFile, &efBuf,
++ NULL, CKY_SIZE_UNKNOWN, CKYAppletFill_Null, NULL, apduRC);
++ CKYBuffer_FreeData(&efBuf);
++ return ret;
++}
++
++CKYStatus
++P15Applet_VerifyPIN(CKYCardConnection *conn, const char *pin,
++ const P15PinInfo *pinInfo, CKYISOStatus *apduRC)
++{
++ CKYStatus ret;
++ CKYISOStatus status;
++ CKYSize size;
++ CKYBuffer encodedPin;
++ P15AppletArgVerifyPIN vps;
++
++ CKYBuffer_InitEmpty(&encodedPin);
++
++ if (apduRC == NULL) {
++ apduRC = &status;
++ }
++
++ size = strlen(pin);
++ if (pinInfo->pinFlags & P15PinNeedsPadding) {
++ if (size > pinInfo->storedLength) {
++ size = pinInfo->storedLength;
++ }
++ ret=CKYBuffer_Reserve(&encodedPin, pinInfo->storedLength);
++ if (ret != CKYSUCCESS) { goto fail; }
++ }
++ /* This is where we would do upcase processing for the case insensitive
++ * flag. It's also where we would do mapping for bcd pins */
++ ret = CKYBuffer_Replace(&encodedPin, 0, (const CKYByte *)pin, size);
++ if (ret != CKYSUCCESS) { goto fail; }
++ if (pinInfo->pinFlags & P15PinNeedsPadding) {
++ int i;
++ int padSize = pinInfo->storedLength - size;
++ for (i=0; i < padSize; i++) {
++ CKYBuffer_AppendChar(&encodedPin, pinInfo->padChar);
++ }
++ }
++
++ vps.pinRef = pinInfo->pinRef |
++ ((pinInfo->pinFlags & P15PinLocal) ? ISO_LOGIN_LOCAL : ISO_LOGIN_GLOBAL);
++ vps.pinVal = &encodedPin;
++ ret = CKYApplet_HandleAPDU(conn, P15AppletFactory_VerifyPIN, &vps, NULL,
++ 0, CKYAppletFill_Null,
++ NULL, apduRC);
++ /* it's unfortunate that the same code that means 'more data to follow' for
++ * GetCertificate also means, auth failure, you only have N more attempts
++ * left in the verify PIN call */
++ if ((*apduRC & CKYISO_MORE_MASK) == CKYISO_MORE) {
++ ret = CKYAPDUFAIL;
++ }
++fail:
++ CKYBuffer_FreeData(&encodedPin);
++ return ret;
++}
++
++
++/*
++ * Read Record
++ */
++CKYStatus
++P15Applet_ReadRecord(CKYCardConnection *conn, CKYByte record, CKYByte short_ef,
++ CKYByte flags, CKYByte size, CKYBuffer *data, CKYISOStatus *apduRC)
++{
++ P15AppletArgReadRecord rrd;
++
++ rrd.record = record;
++ rrd.short_ef = short_ef;
++ rrd.flags = flags;
++ rrd.size = size;
++ return CKYApplet_HandleAPDU(conn, P15AppletFactory_ReadRecord, &rrd, NULL,
++ CKY_SIZE_UNKNOWN, CKYAppletFill_ReplaceBuffer, data, apduRC);
++}
++
++static CKYStatus
++P15Applet_ManageSecurityEnvironment(CKYCardConnection *conn, CKYByte key,
++ CKYByte direction, CKYByte p1,
++ CKYISOStatus *apduRC)
++{
++ P15AppletArgManageSecurityEnvironment mse;
++
++ mse.p1 = p1; /* this appears to be where most cards disagree */
++ mse.p2 = (direction == CKY_DIR_DECRYPT) ? ISO_MSE_KEA : ISO_MSE_SIGN;
++ mse.keyRef = key; /* should be CKYBuffer in the future? */
++ return CKYApplet_HandleAPDU(conn,
++ P15AppletFactory_ManageSecurityEnvironment, &mse, NULL,
++ CKY_SIZE_UNKNOWN, CKYAppletFill_Null, NULL, apduRC);
++}
++
++CKYStatus
++P15Applet_SignDecrypt(CKYCardConnection *conn, CKYByte key,
++ unsigned int keySize, CKYByte direction,
++ const CKYBuffer *data, CKYBuffer *result, CKYISOStatus *apduRC)
++{
++ CKYStatus ret;
++ P15AppletArgPerformSecurityOperation pso;
++ CKYSize dataSize = CKYBuffer_Size(data);
++ CKYOffset offset = 0;
++ CKYBuffer tmp;
++ int length = dataSize;
++ int appendLength = length;
++ int hasPad = 0;
++
++ /* Hack, lie and say we are always doing encipherment */
++ direction = CKY_DIR_DECRYPT;
++ CKYBuffer_Resize(result,0);
++ /*
++ * first set the security environment
++ */
++ ret = P15Applet_ManageSecurityEnvironment(conn, key, direction,
++ ISO_MSE_SET|ISO_MSE_QUAL_COMPUTE, apduRC);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++
++ CKYBuffer_InitEmpty(&tmp);
++
++ pso.data = &tmp;
++ pso.dir = direction;
++ if (direction == CKY_DIR_DECRYPT) {
++ length++;
++ CKYBuffer_AppendChar(&tmp, 0x00); /* pad byte */
++ hasPad = 1;
++ }
++ if (CKYCardConnection_GetProtocol(conn) == SCARD_PROTOCOL_T0) {
++ ret = CKYBuffer_Reserve(&tmp, CKY_MAX_WRITE_CHUNK_SIZE);
++ if (ret != CKYSUCCESS) {
++ goto done;
++ }
++ for(offset = 0; length > CKY_MAX_WRITE_CHUNK_SIZE;
++ hasPad = 0,
++ offset += CKY_MAX_WRITE_CHUNK_SIZE,
++ length -= CKY_MAX_WRITE_CHUNK_SIZE) {
++ pso.chain = 1;
++ pso.retLen = 0;
++ CKYBuffer_AppendBuffer(&tmp, data, offset,
++ hasPad ? (CKY_MAX_WRITE_CHUNK_SIZE-1) : CKY_MAX_WRITE_CHUNK_SIZE);
++ ret = CKYApplet_HandleAPDU(conn,
++ P15AppletFactory_PerformSecurityOperation, &pso, NULL,
++ CKY_SIZE_UNKNOWN, CKYAppletFill_Null, NULL, apduRC);
++ if (ret != CKYSUCCESS) {
++ goto done;
++ }
++ CKYBuffer_Resize(&tmp, 0);
++ }
++ appendLength = length;
++ } else {
++ ret = CKYBuffer_Reserve(&tmp, length);
++ if (ret != CKYSUCCESS) {
++ goto done;
++ }
++ }
++ CKYBuffer_AppendBuffer(&tmp, data, offset, appendLength);
++ pso.chain = 0;
++ pso.retLen = dataSize;
++
++ ret = CKYApplet_HandleAPDU(conn,
++ P15AppletFactory_PerformSecurityOperation, &pso, NULL,
++ CKY_SIZE_UNKNOWN, CKYAppletFill_ReplaceBuffer, result, apduRC);
++
++done:
++ CKYBuffer_FreeData(&tmp);
++ return ret;
++}
++
++/*
++ * Read Binary
++ */
++CKYStatus
++P15Applet_ReadBinary(CKYCardConnection *conn, unsigned short offset,
++ CKYByte short_ef, CKYByte flags, CKYByte size,
++ CKYBuffer *data, CKYISOStatus *apduRC)
++{
++ P15AppletArgReadBinary red;
++
++ red.offset = offset;
++ red.short_ef = short_ef;
++ red.flags = flags;
++ red.size = size;
++ return CKYApplet_HandleAPDU(conn, P15AppletFactory_ReadBinary, &red, NULL,
++ CKY_SIZE_UNKNOWN, CKYAppletFill_AppendBuffer, data, apduRC);
++}
++
++CKYStatus
++CACApplet_GetCertificateFirst(CKYCardConnection *conn, CKYBuffer *cert,
++ CKYSize *nextSize, CKYISOStatus *apduRC)
++{
++ CKYStatus ret;
++ CKYISOStatus status;
++ CKYSize size = 100;
++
++ CKYBuffer_Resize(cert,0);
++ if (apduRC == NULL) {
++ apduRC = &status;
++ }
++ *nextSize = 0;
++
++ ret = CKYApplet_HandleAPDU(conn,
++ CACAppletFactory_GetCertificate, &size, NULL,
++ CKY_SIZE_UNKNOWN, CKYAppletFill_AppendBuffer, cert,
++ apduRC);
++ if ((*apduRC & CKYISO_MORE_MASK) == CKYISO_MORE) {
++ *nextSize = *apduRC & ~CKYISO_MORE_MASK;
++ }
++ return ret;
++}
++
++CKYStatus
++CACApplet_GetCertificateAppend(CKYCardConnection *conn, CKYBuffer *cert,
++ CKYSize nextSize, CKYISOStatus *apduRC)
++{
++ CKYStatus ret;
++ CKYISOStatus status;
++ CKYSize size = nextSize;
++
++ if (apduRC == NULL) {
++ apduRC = &status;
++ }
++
++ ret = CKYApplet_HandleAPDU(conn,
++ CACAppletFactory_GetCertificate, &size, NULL,
++ CKY_SIZE_UNKNOWN, CKYAppletFill_AppendBuffer, cert,
++ apduRC);
++ while ((*apduRC & CKYISO_MORE_MASK) == CKYISO_MORE) {
++ size = *apduRC & ~CKYISO_MORE_MASK;
++ ret = CKYApplet_HandleAPDU(conn,
++ CACAppletFactory_GetCertificate, &size, NULL,
++ CKY_SIZE_UNKNOWN, CKYAppletFill_AppendBuffer, cert,
++ apduRC);
++ }
++ return ret;
++}
++
++/* Select the PIV applet */
++static CKYByte pivAid[] = {0xa0, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00,
++ 0x10, 0x00};
++CKYStatus
++PIVApplet_Select(CKYCardConnection *conn, CKYISOStatus *apduRC)
++{
++ CKYStatus ret;
++ CKYBuffer PIV_Applet_AID,return_AID;
++
++ CKYBuffer_InitEmpty(&return_AID);
++ CKYBuffer_InitFromData(&PIV_Applet_AID, pivAid, sizeof(pivAid));
++ ret = CKYApplet_HandleAPDU(conn, CKYAppletFactory_SelectFile,
++ &PIV_Applet_AID,
++ NULL, CKY_SIZE_UNKNOWN, CKYAppletFill_AppendBuffer,
++ &return_AID, apduRC);
++ /* Some cards return OK, but don't switch to our applet */
++ /* PIV has a well defined return for it's select, check to see if we have
++ * a PIV card here */
++ if (CKYBuffer_GetChar(&return_AID,0) != 0x61) {
++ /* not an application property template, so not a PIV. We could
++ * check that the aid tag (0x4f) and theallocation authority tag (0x79)
++ * are present, but what we are really avoiding is broken cards that
++ * lie about being able to switch to a particular applet, so the first
++ * tag should be sufficient */
++ ret = CKYAPDUFAIL; /* what we should have gotten */
++ }
++ CKYBuffer_FreeData(&PIV_Applet_AID);
++ CKYBuffer_FreeData(&return_AID);
++ return ret;
++}
++
++/*
++ * Get a PIV Certificate
++ */
++CKYStatus
++PIVApplet_GetCertificate(CKYCardConnection *conn, CKYBuffer *cert, int tag,
++ CKYISOStatus *apduRC)
++{
++ CKYStatus ret;
++ CKYISOStatus status;
++ CKYBuffer tagBuf;
++
++ CKYBuffer_InitEmpty(&tagBuf);
++ CKYBuffer_Reserve(&tagBuf,4); /* can be up to 4 bytes */
++
++ CKYBuffer_Resize(cert,0);
++ if (apduRC == NULL) {
++ apduRC = &status;
++ }
++ if (tag >= 0x01000000) {
++ ret = CKYBuffer_AppendChar(&tagBuf, (tag >> 24) & 0xff);
++ if (ret != CKYSUCCESS) { goto loser; }
++ }
++ if (tag >= 0x010000) {
++ ret = CKYBuffer_AppendChar(&tagBuf, (tag >> 16) & 0xff);
++ if (ret != CKYSUCCESS) { goto loser; }
++ }
++ if (tag >= 0x0100) {
++ ret =CKYBuffer_AppendChar(&tagBuf, (tag >> 8) & 0xff);
++ if (ret != CKYSUCCESS) { goto loser; }
++ }
++ ret = CKYBuffer_AppendChar(&tagBuf, tag & 0xff);
++ if (ret != CKYSUCCESS) { goto loser; }
++
++
++ ret = CKYApplet_HandleAPDU(conn,
++ PIVAppletFactory_GetCertificate, &tagBuf, NULL,
++ CKY_SIZE_UNKNOWN, CKYAppletFill_AppendBuffer, cert,
++ apduRC);
++loser:
++ CKYBuffer_FreeData(&tagBuf);
++
++ return ret;
++}
++
++
++/*
++ * record the next ber tag and length. NOTE: this is a state machine.
++ * we can handle the case where we are passed the data just one byte
++ * at a time.
++ */
++static CKYStatus
++pivUnwrap(const CKYBuffer *buf, CKYOffset *offset,
++ CKYSize *dataSize, PIVUnwrapState *unwrap)
++{
++ if (unwrap->tag == 0) {
++ unwrap->tag = CKYBuffer_GetChar(buf, *offset);
++ if (unwrap->tag == 0) unwrap->tag = 0xff;
++ (*offset)++;
++ (*dataSize)--;
++ }
++ if (*dataSize == 0) {
++ return CKYSUCCESS;
++ }
++ if (unwrap->length_bytes != 0) {
++ int len;
++ if (unwrap->length_bytes == -1) {
++ len = CKYBuffer_GetChar(buf, *offset);
++ unwrap->length_bytes = 0;
++ unwrap->length = len;
++ (*offset)++;
++ (*dataSize)--;
++ if (len & 0x80) {
++ unwrap->length = 0;
++ unwrap->length_bytes = len & 0x7f;
++ }
++ }
++ while ((*dataSize != 0) && (unwrap->length_bytes != 0)) {
++ len = CKYBuffer_GetChar(buf, *offset);
++ (*offset) ++;
++ (*dataSize) --;
++ unwrap->length = ((unwrap->length) << 8 | len);
++ unwrap->length_bytes--;
++ }
++ }
++ return CKYSUCCESS;
++}
++
++/*
++ * Remove the BER wrapping first...
++ */
++static CKYStatus
++pivAppletFill_AppendUnwrapBuffer(const CKYBuffer *response,
++ CKYSize size, void *param)
++{
++ PIVAppletRespSignDecrypt *prsd = (PIVAppletRespSignDecrypt *)param;
++ CKYBuffer *buf = prsd->buf;
++ CKYSize dataSize = CKYBuffer_Size(response);
++ CKYOffset offset = 0;
++
++ if (dataSize <= 2) {
++ return CKYSUCCESS;
++ }
++ dataSize -= 2;
++ /* remove the first tag */
++ (void) pivUnwrap(response, &offset, &dataSize, &prsd->tag_1);
++ if (dataSize == 0) {
++ return CKYSUCCESS;
++ }
++ /* remove the second tag */
++ (void) pivUnwrap(response, &offset, &dataSize, &prsd->tag_2);
++ if (dataSize == 0) {
++ return CKYSUCCESS;
++ }
++ /* the rest is real data */
++ return CKYBuffer_AppendData(buf, CKYBuffer_Data(response) + offset,
++ dataSize);
++}
++
++static CKYStatus
++piv_wrapEncodeLength(CKYBuffer *buf, int length, int ber_len)
++{
++ if (ber_len== 1) {
++ CKYBuffer_AppendChar(buf,length);
++ } else {
++ ber_len--;
++ CKYBuffer_AppendChar(buf,0x80+ber_len);
++ while(ber_len--) {
++ CKYBuffer_AppendChar(buf,(length >> (8*ber_len)) & 0xff);
++ }
++ }
++ return CKYSUCCESS;
++}
++/*
++ * do a PIV Sign/Decrypt
++ */
++CKYStatus
++PIVApplet_SignDecrypt(CKYCardConnection *conn, CKYByte key, unsigned int keySize, int derive,
++ const CKYBuffer *data, CKYBuffer *result, CKYISOStatus *apduRC)
++{
++ CKYStatus ret;
++ CKYSize dataSize = CKYBuffer_Size(data);
++ CKYSize outputSize = keySize;
++ CKYOffset offset = 0;
++ CKYBuffer tmp;
++ CKYByte alg;
++ int ber_len_1;
++ int ber_len_2;
++ int length;
++ PIVAppletArgSignDecrypt pasd;
++ PIVAppletRespSignDecrypt prsd;
++
++ /* PIV only defines RSA 1024 and 2048, ECC 256 and ECC 384!!! */
++ if (keySize == 128) { /* 1024 bit == 128 bytes */
++ ber_len_2 = 2;
++ ber_len_1 = 2;
++ alg = 0x6;
++ } else if (keySize == 256) { /* 2048 bits == 256 bytes */
++ ber_len_2 = 3;
++ ber_len_1 = 3;
++ alg = 0x7;
++ } else if (keySize == 32) { /* 256 bits = 32 bytes */
++ ber_len_2 = 1;
++ ber_len_1 = 1;
++ alg = 0x11;
++ if (!derive) outputSize = keySize*2;
++ } else if (keySize == 48) { /* 384 bits = 48 bytes */
++ ber_len_2 = 1;
++ ber_len_1 = 1;
++ alg = 0x14;
++ if (!derive) outputSize = keySize*2;
++ } else {
++ return CKYINVALIDARGS;
++ }
++
++ CKYBuffer_InitEmpty(&tmp);
++ ret = CKYBuffer_Reserve(&tmp, CKY_MAX_WRITE_CHUNK_SIZE);
++ if (ret != CKYSUCCESS) {
++ goto done;
++ }
++ CKYBuffer_AppendChar(&tmp,0x7c);
++ piv_wrapEncodeLength(&tmp,dataSize + ber_len_2 + 3,ber_len_1);
++ CKYBuffer_AppendChar(&tmp,0x82);
++ CKYBuffer_AppendChar(&tmp,0x0);
++ CKYBuffer_AppendChar(&tmp, derive ? 0x85 : 0x81);
++ piv_wrapEncodeLength(&tmp,dataSize,ber_len_2);
++
++ /* now length == header length from here to the end*/
++ length = CKYBuffer_Size(&tmp);
++
++ if (length + dataSize > CKY_MAX_WRITE_CHUNK_SIZE) {
++ CKYBuffer_AppendBuffer(&tmp, data, 0, CKY_MAX_WRITE_CHUNK_SIZE-length);
++ } else {
++ CKYBuffer_AppendBuffer(&tmp, data, 0, dataSize);
++ }
++
++ prsd.tag_1.tag = 0;
++ prsd.tag_1.length_bytes = -1;
++ prsd.tag_1.length = 0;
++ prsd.tag_2.tag = 0;
++ prsd.tag_2.length_bytes = -1;
++ prsd.tag_2.length = 0;
++ prsd.buf = result;
++ pasd.alg = alg;
++ pasd.key = key;
++ pasd.buf = &tmp;
++
++ CKYBuffer_Resize(result,0);
++ for(offset = -length; (dataSize-offset) > CKY_MAX_WRITE_CHUNK_SIZE; ) {
++ pasd.chain = 1;
++ pasd.len = 0;
++ ret = CKYApplet_HandleAPDU(conn, PIVAppletFactory_SignDecrypt,
++ &pasd, NULL, CKY_SIZE_UNKNOWN,
++ pivAppletFill_AppendUnwrapBuffer,
++ &prsd, apduRC);
++ if (ret != CKYSUCCESS) {
++ goto done;
++ }
++ CKYBuffer_Resize(&tmp,0);
++ /* increment before we append the next tmp buffer */
++ offset += CKY_MAX_WRITE_CHUNK_SIZE;
++ CKYBuffer_AppendBuffer(&tmp, data, offset,
++ MIN(dataSize-offset, CKY_MAX_WRITE_CHUNK_SIZE));
++ }
++
++ pasd.chain = 0;
++ pasd.len = outputSize;
++
++ ret = CKYApplet_HandleAPDU(conn, PIVAppletFactory_SignDecrypt,
++ &pasd, NULL, CKY_SIZE_UNKNOWN,
++ pivAppletFill_AppendUnwrapBuffer,
++ &prsd, apduRC);
++
++ if ((ret == CKYSUCCESS) && (CKYBuffer_Size(result) != outputSize)) {
++ /* RSA returns the same data size as input, didn't happen, so
++ * something is wrong. */
++ }
++
++done:
++ CKYBuffer_FreeData(&tmp);
++ return ret;
++}
++
++/*
++ * PIN cluster
++ */
++CKYStatus
++CKYApplet_CreatePIN(CKYCardConnection *conn, CKYByte pinNumber,
++ CKYByte maxAttempts, const char *pinValue,
++ const CKYBuffer *nonce, CKYISOStatus *apduRC)
++{
++ CKYAppletArgCreatePIN cpd;
++ cpd.pinValue = pinValue;
++ cpd.maxAttempts = maxAttempts;
++ cpd.pinValue = pinValue;
++ return CKYApplet_HandleAPDU(conn, CKYAppletFactory_CreatePIN, &cpd, nonce,
++ 0, CKYAppletFill_Null, NULL, apduRC);
++
++}
++
++CKYStatus
++CKYApplet_VerifyPIN(CKYCardConnection *conn, CKYByte pinNumber,
++ const char *pinValue, CKYBuffer *nonce, CKYISOStatus *apduRC)
++{
++ CKYAppletArgVerifyPIN vpd;
++ vpd.pinValue = pinValue;
++ vpd.pinNumber = pinNumber;
++ return CKYApplet_HandleAPDU(conn, CKYAppletFactory_VerifyPIN, &vpd, NULL,
++ 8, CKYAppletFill_ReplaceBuffer, nonce, apduRC);
++}
++
++CKYStatus
++CKYApplet_ChangePIN(CKYCardConnection *conn, const char *oldPin,
++ const char *newPin, const CKYBuffer *nonce, CKYISOStatus *apduRC)
++{
++ CKYAppletArgChangePIN cpd;
++ cpd.oldPin = oldPin;
++ cpd.newPin = newPin;
++ return CKYApplet_HandleAPDU(conn, CKYAppletFactory_ChangePIN, &cpd, nonce,
++ 0, CKYAppletFill_Null, NULL, apduRC);
++}
++
++CKYStatus
++CKYApplet_ListPINs(CKYCardConnection *conn, unsigned short *pins,
++ CKYISOStatus *apduRC)
++{
++ return CKYApplet_HandleAPDU(conn, CKYAppletFactory_ListPINs, NULL, NULL,
++ CKY_SIZE_LIST_PINS, CKYAppletFill_Short, pins, apduRC);
++}
++
++CKYStatus
++CKYApplet_Logout(CKYCardConnection *conn, CKYByte pinNumber,
++ const CKYBuffer *nonce, CKYISOStatus *apduRC)
++{
++ return CKYApplet_HandleAPDU(conn, CKYAppletFactory_Logout, &pinNumber, nonce,
++ 0, CKYAppletFill_Null, NULL, apduRC);
++}
++
++CKYStatus
++CKYApplet_CreateObject(CKYCardConnection *conn, unsigned long objectID,
++ CKYSize size, unsigned short readACL, unsigned short writeACL,
++ unsigned short deleteACL, const CKYBuffer *nonce, CKYISOStatus *apduRC)
++{
++ CKYAppletArgCreateObject cod;
++ cod.objectID = objectID;
++ cod.size = size;
++ cod.readACL = readACL;
++ cod.writeACL = writeACL;
++ cod.deleteACL = deleteACL;
++ return CKYApplet_HandleAPDU(conn, CKYAppletFactory_CreateObject, &cod,
++ nonce, 0, CKYAppletFill_Null, NULL, apduRC);
++}
++
++CKYStatus
++CKYApplet_DeleteObject(CKYCardConnection *conn, unsigned long objectID,
++ CKYByte zero, const CKYBuffer *nonce, CKYISOStatus *apduRC)
++{
++ CKYAppletArgDeleteObject dod;
++ dod.objectID = objectID;
++ dod.zero = zero;
++ return CKYApplet_HandleAPDU(conn, CKYAppletFactory_DeleteObject, &dod,
++ nonce, 0, CKYAppletFill_Null, NULL, apduRC);
++}
++
++/*
++ * Read Object cluster...
++ * This is the raw version that goes issues a single APDU.
++ */
++CKYStatus
++CKYApplet_ReadObject(CKYCardConnection *conn, unsigned long objectID,
++ CKYOffset offset, CKYByte size, const CKYBuffer *nonce,
++ CKYBuffer *data, CKYISOStatus *apduRC)
++{
++ CKYAppletArgReadObject rod;
++
++ rod.objectID = objectID;
++ rod.offset = offset;
++ rod.size = size;
++ return CKYApplet_HandleAPDU(conn, CKYAppletFactory_ReadObject, &rod, nonce,
++ size, CKYAppletFill_ReplaceBuffer, data, apduRC);
++}
++
++/*
++ * Read Object Append cluster...
++ * This is also issues a single APDU, but appends the resulting data
++ * to an existing buffer.
++ */
++
++CKYStatus
++CKYApplet_ReadObjectAppend(CKYCardConnection *conn, unsigned long objectID,
++ CKYOffset offset, CKYByte size, const CKYBuffer *nonce,
++ CKYBuffer *data, CKYISOStatus *apduRC)
++{
++ CKYAppletArgReadObject rod;
++
++ rod.objectID = objectID;
++ rod.offset = offset;
++ rod.size = size;
++ return CKYApplet_HandleAPDU(conn, CKYAppletFactory_ReadObject, &rod, nonce,
++ size, CKYAppletFill_AppendBuffer, data, apduRC);
++}
++
++/*
++ * Read Object
++ * This is makes multiple APDU calls to read the entire object.
++ */
++CKYStatus
++CKYApplet_ReadObjectFull(CKYCardConnection *conn, unsigned long objectID,
++ CKYOffset offset, CKYSize size, const CKYBuffer *nonce,
++ CKYBuffer *data, CKYISOStatus *apduRC)
++{
++ CKYAppletArgReadObject rod;
++ CKYStatus ret = CKYSUCCESS;
++
++ rod.objectID = objectID;
++ rod.offset = offset;
++ do {
++ rod.size = (CKYByte) MIN(size, CKY_MAX_READ_CHUNK_SIZE);
++ ret = CKYApplet_HandleAPDU(conn, CKYAppletFactory_ReadObject, &rod,
++ nonce, rod.size, CKYAppletFill_AppendBuffer, data, apduRC);
++ size -= rod.size;
++ rod.offset += rod.size;
++ } while ((size > 0) && (ret == CKYSUCCESS));
++
++ return ret;
++}
++
++
++/*
++ * Write Object
++ * This makes multiple APDU calls to write the entire object.
++ *
++ */
++
++CKYStatus
++CKYApplet_WriteObjectFull(CKYCardConnection *conn, unsigned long objectID,
++ CKYOffset offset, CKYSize size, const CKYBuffer *nonce,
++ const CKYBuffer *data, CKYISOStatus *apduRC)
++{
++
++ CKYBuffer chunk;
++ CKYOffset srcOffset = 0;
++ CKYAppletArgWriteObject wod;
++ CKYStatus ret = CKYSUCCESS;
++
++ wod.objectID = objectID;
++ wod.offset = offset;
++ do {
++ wod.size = (CKYByte) MIN(size, 220);
++ ret = CKYBuffer_InitFromBuffer(&chunk, data,
++ srcOffset, wod.size);
++ if(ret == CKYSUCCESS) {
++ wod.data = &chunk;
++ ret = CKYApplet_HandleAPDU(conn, CKYAppletFactory_WriteObject, &wod,
++ nonce, 0, CKYAppletFill_Null, NULL, apduRC);
++ size -= wod.size;
++ wod.offset += wod.size;
++ srcOffset += wod.size;
++ CKYBuffer_FreeData(&chunk);
++ }
++
++ } while ((size > 0) && (ret == CKYSUCCESS));
++
++ return ret;
++}
++
++/*
++ * List Object cluster
++ */
++static CKYStatus
++ckyAppletFill_ListObjects(const CKYBuffer *response, CKYSize size, void *param)
++{
++ CKYAppletRespListObjects *lop = (CKYAppletRespListObjects *)param;
++
++ lop->objectID = CKYBuffer_GetLong(response, 0);
++ lop->objectSize = CKYBuffer_GetLong(response, 4);
++ lop->readACL = CKYBuffer_GetShort(response, 8);
++ lop->writeACL = CKYBuffer_GetShort(response, 10);
++ lop->deleteACL = CKYBuffer_GetShort(response, 12);
++ return CKYSUCCESS;
++}
++
++CKYStatus
++CKYApplet_ListObjects(CKYCardConnection *conn, CKYByte seq,
++ CKYAppletRespListObjects *lop, CKYISOStatus *apduRC)
++{
++ return CKYApplet_HandleAPDU(conn, CKYAppletFactory_ListObjects, &seq, NULL,
++ CKY_SIZE_LIST_OBJECTS, ckyAppletFill_ListObjects, lop, apduRC);
++}
++
++/*
++ * GetStatus cluster
++ */
++static CKYStatus
++ckyAppletFill_GetStatus(const CKYBuffer *response, CKYSize size, void *param)
++{
++ CKYAppletRespGetStatus *gsp = (CKYAppletRespGetStatus *)param;
++
++ gsp->protocolMajorVersion = CKYBuffer_GetChar(response, 0);
++ gsp->protocolMinorVersion = CKYBuffer_GetChar(response, 1);
++ gsp->appletMajorVersion = CKYBuffer_GetChar(response, 2);
++ gsp->appletMinorVersion = CKYBuffer_GetChar(response, 3);
++ gsp->totalObjectMemory = CKYBuffer_GetLong(response, 4);
++ gsp->freeObjectMemory = CKYBuffer_GetLong(response, 8);
++ gsp->numberPins = CKYBuffer_GetChar(response, 12);
++ gsp->numberKeys = CKYBuffer_GetChar(response, 13);
++ gsp->loggedInMask = CKYBuffer_GetShort(response, 14);
++ return CKYSUCCESS;
++}
++
++CKYStatus
++CKYApplet_GetStatus(CKYCardConnection *conn, CKYAppletRespGetStatus *status,
++ CKYISOStatus *apduRC)
++{
++ return CKYApplet_HandleAPDU(conn, CKYAppletFactory_GetStatus, NULL, NULL,
++ CKY_SIZE_GET_STATUS, ckyAppletFill_GetStatus, status, apduRC);
++}
++
++CKYStatus
++CKYApplet_Noop(CKYCardConnection *conn, CKYISOStatus *apduRC)
++{
++ return CKYApplet_HandleAPDU(conn, CKYAppletFactory_Noop, NULL, NULL,
++ 0, CKYAppletFill_Null, NULL, apduRC);
++}
++
++CKYStatus
++CKYApplet_GetBuildID(CKYCardConnection *conn, unsigned long *buildID,
++ CKYISOStatus *apduRC)
++{
++ return CKYApplet_HandleAPDU(conn, CKYAppletFactory_GetBuildID, NULL, NULL,
++ CKY_SIZE_GET_BUILDID, CKYAppletFill_Long, buildID, apduRC);
++}
++
++/*
++ * GetLifeCycle cluster
++ */
++static CKYStatus
++ckyAppletFill_GetLifeCycle(const CKYBuffer *response, CKYSize size, void *param)
++{
++ *(CKYByte *)param= CKYBuffer_GetChar(response,0);
++ return CKYSUCCESS;
++}
++
++CKYStatus
++CKYApplet_GetLifeCycle(CKYCardConnection *conn, CKYByte *personalized,
++ CKYISOStatus *apduRC)
++{
++ return CKYApplet_HandleAPDU(conn, CKYAppletFactory_GetLifeCycle, NULL, NULL,
++ CKY_SIZE_GET_LIFE_CYCLE, ckyAppletFill_GetLifeCycle, personalized, apduRC);
++}
++
++static CKYStatus
++ckyAppletFill_GetLifeCycleV2(const CKYBuffer *response, CKYSize size, void *param)
++{
++ CKYAppletRespGetLifeCycleV2 *ext = (CKYAppletRespGetLifeCycleV2 *) param;
++ ext->lifeCycle = CKYBuffer_GetChar(response,0);
++ ext->pinCount = CKYBuffer_GetChar(response,1);
++ ext->protocolMajorVersion = CKYBuffer_GetChar(response,2);
++ ext->protocolMinorVersion = CKYBuffer_GetChar(response,3);
++ return CKYSUCCESS;
++}
++
++/*
++ * GetStatus cluster
++ */
++static CKYStatus
++ckyAppletFill_LifeCycleStatus(const CKYBuffer *response, CKYSize size, void *param)
++{
++ CKYAppletRespGetLifeCycleV2 *ext = (CKYAppletRespGetLifeCycleV2 *) param;
++ ext->pinCount = CKYBuffer_GetChar(response,12);
++ ext->protocolMajorVersion = CKYBuffer_GetChar(response,0);
++ ext->protocolMinorVersion = CKYBuffer_GetChar(response,1);
++ return CKYSUCCESS;
++}
++
++CKYStatus
++CKYApplet_GetLifeCycleV2(CKYCardConnection *conn,
++ CKYAppletRespGetLifeCycleV2 *ext, CKYISOStatus *apduRC)
++{
++ CKYStatus status;
++ status = CKYApplet_HandleAPDU(conn, CKYAppletFactory_GetLifeCycleV2,
++ NULL,NULL, CKY_SIZE_GET_LIFE_CYCLE_V2, ckyAppletFill_GetLifeCycleV2,
++ ext, apduRC);
++
++ /* Get Life Cycle Version 2 is a new APDU with combines data from
++ * two other APDUs. Older tokens don't have this APDU, so use
++ * the old method to get the data */
++ if (status == CKYAPDUFAIL) {
++ status = CKYApplet_GetLifeCycle(conn,&ext->lifeCycle, apduRC);
++ if (status != CKYSUCCESS) {
++ return status;
++ }
++ status = CKYApplet_HandleAPDU(conn, CKYAppletFactory_GetStatus, NULL,
++ NULL, CKY_SIZE_GET_STATUS, ckyAppletFill_LifeCycleStatus, ext, apduRC);
++ }
++ return status;
++}
++
++/*
++ * GetBuiltin cluster
++ */
++static CKYStatus
++ckyAppletFill_GetBuiltinACL(const CKYBuffer *response,CKYSize size,void *param)
++{
++ CKYAppletRespGetBuiltinACL *gba = (CKYAppletRespGetBuiltinACL *) param;
++ gba->create_object_ACL = CKYBuffer_GetShort(response,0);
++ gba->create_object_ACL = CKYBuffer_GetShort(response,2);
++ gba->create_object_ACL = CKYBuffer_GetShort(response,4);
++ gba->enable_ACL_change = CKYBuffer_GetChar(response,6);
++ return CKYSUCCESS;
++}
++
++CKYStatus
++CKYApplet_GetBuiltinACL(CKYCardConnection *conn,
++ CKYAppletRespGetBuiltinACL *gba, CKYISOStatus *apduRC)
++{
++ return CKYApplet_HandleAPDU(conn, CKYAppletFactory_GetBuiltinACL, NULL,
++ NULL, CKY_SIZE_GET_BUILTIN_ACL, ckyAppletFill_GetBuiltinACL, gba,
++ apduRC);
++}
++
++CKYStatus
++CKYApplet_GetIssuerInfo(CKYCardConnection *conn, CKYBuffer *info,
++ CKYISOStatus *apduRC)
++{
++ return CKYApplet_HandleAPDU(conn, CKYAppletFactory_GetIssuerInfo, NULL,
++ NULL, CKY_SIZE_GET_ISSUER_INFO, CKYAppletFill_ReplaceBuffer,
++ info, apduRC);
++}
++
++CKYStatus
++CKYApplet_GetRandom(CKYCardConnection *conn, CKYBuffer *data, CKYByte len,
++ CKYISOStatus *apduRC)
++{
++ return CKYApplet_HandleAPDU(conn, CKYAppletFactory_GetRandom, &len,
++ NULL, len, CKYAppletFill_ReplaceBuffer, data, apduRC);
++}
++
++CKYStatus
++CKYApplet_GetRandomAppend(CKYCardConnection *conn, CKYBuffer *data, CKYByte len,
++ CKYISOStatus *apduRC)
++{
++ return CKYApplet_HandleAPDU(conn, CKYAppletFactory_GetRandom, &len,
++ NULL, len, CKYAppletFill_AppendBuffer, data, apduRC);
++}
++
++CKYStatus
++CKYApplet_SeedRandom(CKYCardConnection *conn, const CKYBuffer *data,
++ CKYISOStatus *apduRC)
++{
++ return CKYApplet_HandleAPDU(conn, CKYAppletFactory_SeedRandom, data,
++ NULL, 0, CKYAppletFill_Null, NULL, apduRC);
++}
++
++
++
++/*
++ * deprecates 0.x functions
++ */
++/* old applet verify pin call (no nonce returned) */
++CKYStatus
++CKYApplet_VerifyPinV0(CKYCardConnection *conn, CKYByte pinNumber,
++ const char *pinValue, CKYISOStatus *apduRC)
++{
++ CKYAppletArgVerifyPIN vpd;
++ vpd.pinValue = pinValue;
++ vpd.pinNumber = pinNumber;
++
++ vpd.pinValue = pinValue;
++ vpd.pinNumber = pinNumber;
++ return CKYApplet_HandleAPDU(conn, CKYAppletFactory_VerifyPIN, &vpd, NULL,
++ 0, CKYAppletFill_Null, NULL, apduRC);
++}
++
++/* logout all */
++CKYStatus
++CKYApplet_LogoutAllV0(CKYCardConnection *conn, CKYISOStatus *apduRC)
++{
++ return CKYApplet_HandleAPDU(conn, CKYAppletFactory_LogoutAllV0, NULL, NULL,
++ 0, CKYAppletFill_Null, NULL, apduRC);
++}
+diff -up ./esc/src/lib/coolkey/cky_applet.h.fix1 ./esc/src/lib/coolkey/cky_applet.h
+--- ./esc/src/lib/coolkey/cky_applet.h.fix1 2018-04-26 11:44:38.436986198 -0700
++++ ./esc/src/lib/coolkey/cky_applet.h 2018-04-26 11:44:38.436986198 -0700
+@@ -0,0 +1,680 @@
++/* ***** BEGIN COPYRIGHT BLOCK *****
++ * Copyright (C) 2005 Red Hat, Inc.
++ * All rights reserved.
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation version
++ * 2.1 of the License.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
++ * ***** END COPYRIGHT BLOCK ***** */
++
++#ifndef CKY_APPLET_H
++#define CKY_APPLET_H 1
++
++#include "cky_base.h"
++#include "cky_card.h"
++#include "cky_factory.h"
++
++/*
++ * base typdefs
++ */
++/*
++ * ISO and applet response codes.
++ */
++typedef unsigned short CKYISOStatus; /* applet return status */
++/* Psuedo return codes created by the library software */
++#define CKYISO_INVRESPONSE 0xffff /* code returned by library to
++ * indicate no valid response
++ * received */
++#define CKYISO_NORESPONSE 0x0000 /* code returned by the library if
++ * operation failed before
++ * attempting to read a response */
++/* ISO defined Return codes */
++#define CKYISO_SUCCESS 0x9000 /* SUCCESS! */
++#define CKYISO_MORE_MASK 0xff00 /* More data mask */
++#define CKYISO_MORE 0x6300 /* More data available */
++#define CKYISO_DATA_INVALID 0x6984
++#define CKYISO_CONDITION_NOT_SATISFIED 0x6985 /* AKA not logged in (CAC)*/
++#define CKYISO_SECURITY_NOT_SATISFIED 0x6982 /* AKA not logged in (PIV)*/
++/* Applet Defined Return codes */
++#define CKYISO_NO_MEMORY_LEFT 0x9c01 /* There have been memory
++ * problems on the card */
++#define CKYISO_AUTH_FAILED 0x9c02 /* Entered PIN is not correct */
++#define CKYISO_OPERATION_NOT_ALLOWED 0x9c03 /* Required operation is not
++ * allowed in actual
++ * circumstances */
++#define CKYISO_UNSUPPORTED_FEATURE 0x9c05 /* Required feature is not (yet)
++ * supported */
++#define CKYISO_UNAUTHORIZED 0x9c06 /* Required operation was not
++ * authorized because of a lack of
++ * privileges */
++#define CKYISO_OBJECT_NOT_FOUND 0x9c07 /* Required object is missing */
++#define CKYISO_OBJECT_EXISTS 0x9c08 /* New object ID already in use */
++#define CKYISO_INCORRECT_ALG 0x9c09 /* Algorithm specified is not
++ * correct */
++#define CKYISO_SIGNATURE_INVALID 0x9c0b /* Verify operation detected an
++ * invalid signature */
++#define CKYISO_IDENTITY_BLOCKED 0x9c0c /* Operation has been blocked for
++ * security reason */
++#define CKYISO_INVALID_PARAMETER 0x9c0f /* Invalid input parameter to
++ * command */
++#define CKYISO_INCORRECT_P1 0x9c10 /* Incorrect P1 parameter */
++#define CKYISO_INCORRECT_P2 0x9c11 /* Incorrect P2 parameter */
++#define CKYISO_SEQUENCE_END 0x9c12 /* No more data available */
++#define CKYISO_INTERNAL_ERROR 0x9cff /* Reserved for debugging,
++ * shouldn't happen */
++
++#define CAC_INVALID_PARAMS 0x6a83
++#define CAC_TAG_FILE 1
++#define CAC_VALUE_FILE 2
++
++
++#define CAC_TAG_CARDURL 0xf3
++#define CAC_TAG_CERTIFICATE 0x70
++#define CAC_TAG_CERTINFO 0x71
++#define CAC_TLV_APP_PKI 0x04
++
++/*
++ * Pin Constants as used by our applet
++ */
++#define CKY_OLD_USER_PIN_NUM 1 /* version 0 and earlier */
++#define CKY_USER_PIN_NUM 0
++
++/*
++ * special size that tells the Verify Function not to verify the size because
++ * the ADPU can return variable size.
++ */
++#define CKY_SIZE_UNKNOWN 0xffffffff
++
++/*
++ * structures for returning Applet responses
++ */
++typedef struct _CKYAppletRespGetStatus {
++ CKYByte protocolMajorVersion;
++ CKYByte protocolMinorVersion;
++ CKYByte appletMajorVersion;
++ CKYByte appletMinorVersion;
++ unsigned long totalObjectMemory;
++ unsigned long freeObjectMemory;
++ CKYByte numberPins;
++ CKYByte numberKeys;
++ unsigned short loggedInMask;
++} CKYAppletRespGetStatus;
++
++typedef struct _CKYAppletRespGetLifeCycleV2 {
++ CKYByte lifeCycle;
++ CKYByte pinCount;
++ CKYByte protocolMajorVersion;
++ CKYByte protocolMinorVersion;
++} CKYAppletRespGetLifeCycleV2;
++
++typedef struct _CKYAppletRespGetBuiltinACL {
++ unsigned short create_object_ACL;
++ unsigned short create_key_ACL;
++ unsigned short create_pin_ACL;
++ CKYByte enable_ACL_change;
++} CKYAppletRespGetBuiltinACL;
++
++typedef struct _CKYAppletRespGetCPLCData {
++ unsigned short CPLCtag;
++ CKYByte length;
++ unsigned short fabricator;
++ unsigned short romType;
++ unsigned short romOSID;
++ unsigned short romOSDate;
++ unsigned short romOSLevel;
++ unsigned short eepromFabricationDate;
++ unsigned long eepromSerialNumber;
++ unsigned short eepromBatchID;
++ unsigned short eepromModuleFabricator;
++ unsigned short eepromModuleDate;
++ unsigned short eepromICManufacturer;
++ unsigned short eepromEmbeddingDate;
++ unsigned short eepromPrePersonalizer;
++ unsigned short eepromPrePersonalizeDate;
++ unsigned long eepromPrePersonalizeID;
++ unsigned short eepromPersonalizer;
++ unsigned short eepromPersonalizeDate;
++ unsigned long eepromPersonalizeID;
++} CKYAppletRespGetCPLCData;
++
++typedef struct _CKYAppletRespListObjects {
++ unsigned long objectID;
++ CKYSize objectSize;
++ unsigned short readACL;
++ unsigned short writeACL;
++ unsigned short deleteACL;
++} CKYAppletRespListObjects;
++
++typedef struct _CKYAppletRespListKeys {
++ CKYByte keyNum;
++ CKYByte keyType;
++ CKYByte keyPartner;
++ unsigned short keySize;
++ unsigned short readACL;
++ unsigned short writeACL;
++ unsigned short useACL;
++} CKYAppletRespListKeys;
++
++/*
++ * structures for the generic factories
++ */
++typedef struct _CKYAppletArgCreatePIN {
++ const char *pinValue;
++ CKYByte pinNumber;
++ CKYByte maxAttempts;
++} CKYAppletArgCreatePIN;
++
++typedef struct _CKYAppletArgVerifyPIN {
++ const char *pinValue;
++ CKYByte pinNumber;
++} CKYAppletArgVerifyPIN;
++
++typedef struct _CKYAppletArgChangePIN {
++ const char *oldPin;
++ const char *newPin;
++ CKYByte pinNumber;
++} CKYAppletArgChangePIN;
++
++typedef struct _CKYAppletArgCreateObject {
++ unsigned long objectID;
++ CKYSize size;
++ unsigned short readACL;
++ unsigned short writeACL;
++ unsigned short deleteACL;
++} CKYAppletArgCreateObject;
++
++typedef struct _CKYAppletArgDeleteObject {
++ unsigned long objectID;
++ CKYByte zero;
++} CKYAppletArgDeleteObject;
++
++typedef struct _CKYAppletArgReadObject {
++ unsigned long objectID;
++ CKYOffset offset;
++ CKYByte size;
++} CKYAppletArgReadObject;
++
++
++typedef struct _CKYAppletArgWriteObject {
++ unsigned long objectID;
++ CKYOffset offset;
++ CKYByte size;
++ CKYBuffer *data;
++
++} CKYAppletArgWriteObject;
++
++typedef struct _CKYAppletArgComputeCrypt {
++ CKYByte keyNumber;
++ CKYByte mode;
++ CKYByte direction;
++ CKYByte location;
++ const CKYBuffer *data;
++ const CKYBuffer *sig;
++} CKYAppletArgComputeCrypt;
++
++typedef struct _CKYAppletArgComputeECCSignature {
++ CKYByte keyNumber;
++ CKYByte location;
++ const CKYBuffer *data;
++ const CKYBuffer *sig;
++} CKYAppletArgComputeECCSignature;
++
++typedef struct _CKYAppletArgComputeECCKeyAgreement {
++ CKYByte keyNumber;
++ CKYByte location;
++ const CKYBuffer *publicValue;
++ const CKYBuffer *secretKey;
++} CKYAppletArgComputeECCKeyAgreement;
++
++
++typedef struct _CACAppletArgReadFile {
++ CKYByte type;
++ CKYByte count;
++ unsigned short offset;
++} CACAppletArgReadFile;
++
++typedef struct _PIVAppletArgSignDecrypt {
++ CKYByte alg;
++ CKYByte key;
++ CKYByte chain;
++ CKYSize len;
++ CKYBuffer *buf;
++} PIVAppletArgSignDecrypt;
++
++typedef struct _pivUnwrapState {
++ CKYByte tag;
++ CKYByte length;
++ int length_bytes;
++} PIVUnwrapState;
++
++typedef struct _PIVAppletRespSignDecrypt {
++ PIVUnwrapState tag_1;
++ PIVUnwrapState tag_2;
++ CKYBuffer *buf;
++} PIVAppletRespSignDecrypt;
++
++typedef struct _P15AppletArgReadRecord {
++ CKYByte record;
++ CKYByte short_ef;
++ CKYByte flags;
++ CKYByte size;
++} P15AppletArgReadRecord;
++
++typedef struct _P15AppletArgReadBinary {
++ unsigned short offset;
++ CKYByte short_ef;
++ CKYByte flags;
++ CKYByte size;
++} P15AppletArgReadBinary;
++
++typedef struct _P15AppletArgVerifyPIN {
++ const CKYBuffer *pinVal;
++ CKYByte pinRef;
++} P15AppletArgVerifyPIN;
++
++typedef struct _P15AppletArgManageSecurityEnvironment {
++ CKYByte p1;
++ CKYByte p2;
++ CKYByte keyRef;
++}
++ P15AppletArgManageSecurityEnvironment;
++
++typedef struct _P15AppletArgPerformSecurityOperation {
++ CKYByte dir;
++ int chain;
++ CKYSize retLen;
++ const CKYBuffer *data;
++} P15AppletArgPerformSecurityOperation;
++
++/* fills in an APDU from a structure -- form of all the generic factories*/
++typedef CKYStatus (*CKYAppletFactory)(CKYAPDU *apdu, const void *param);
++/* fills in an a structure from a response -- form of all the fill structures*/
++typedef CKYStatus (*CKYFillFunction)(const CKYBuffer *response,
++ CKYSize size, void *param);
++
++CKY_BEGIN_PROTOS
++/*****************************************************************
++ *
++ * Generic factorys are used by the generic APDU processing
++ * to customize the formatting of APDU. The all have the same signature
++ * as CKYAppletFactory. Typically APDUs are formatted
++ * using parameterized calls of the form CKYAPDUFactory_ADPUNAME.
++ * The generic processing code, however needs calls with a common
++ * Signature. To accomplish the conversion, we build generic versions
++ * which take a void * parameter. Trivial APDU's can pass NULL or a pointer
++ * to the single parameter that they need. More complicated APDU's use
++ * CKYAppletArg* data structures defined above to pass more arguments.
++ *
++ * Generic factorys then call the standard CKYAPDUFactor_ADPUNAME() functions
++ * to build the APDUs. These functions are intended only as arguments
++ * to the generic ADPU calls, and not to be called directly.
++ *
++ *****************************************************************/
++/* param == CKYBuffer * (AID) */
++CKYStatus CKYAppletFactory_SelectFile(CKYAPDU *apdu, const void *param);
++/* param == NULL */
++CKYStatus CKYAppletFactory_SelectCardManager(CKYAPDU *apdu, const void *param);
++/* param == NULL */
++CKYStatus CKYAppletFactory_GetCPLCData(CKYAPDU *apdu, const void *param);
++/* param == CKYByte * (pointer to seq) */
++CKYStatus CKYAppletFactory_ListKeys(CKYAPDU *apdu, const void *param);
++/* param == CKYAppletArgComputeCrypt */
++CKYStatus CKYAppletFactory_ComputeCryptInit(CKYAPDU *apdu, const void *param);
++/* param == CKYAppletArgComputeCrypt */
++CKYStatus CKYAppletFactory_ComputeCryptProcess(CKYAPDU *apdu, const void *param);
++/* param == CKYAppletArgComputeCrypt */
++CKYStatus CKYAppletFactory_ComputeCryptFinal(CKYAPDU *apdu, const void *param);
++/* param == CKYAppletArgCreatePIN */
++CKYStatus CKYAppletFactory_CreatePIN(CKYAPDU *apdu, const void *param);
++/* param == CKYAppletArgVeriryPIN */
++CKYStatus CKYAppletFactory_VerifyPIN(CKYAPDU *apdu, const void *param);
++/* param == CKYAppletArgChangePIN */
++CKYStatus CKYAppletFactory_ChangePIN(CKYAPDU *apdu, const void *param);
++/* param == NULL */
++CKYStatus CKYAppletFactory_ListPINs(CKYAPDU *apdu, const void *param);
++/* param == CKYByte * (pointer to pinNumber) */
++CKYStatus CKYAppletFactory_Logout(CKYAPDU *apdu, const void *param);
++/* Future add WriteObject */
++/* parm == CKYAppletArgWriteObject */
++CKYStatus CKYAppletFactory_WriteObject(CKYAPDU *apdu, const void *param);
++/* param == CKYAppletArgCreateObject */
++CKYStatus CKYAppletFactory_CreateObject(CKYAPDU *apdu, const void *param);
++/* param == CKYAppletArgDeleteObject */
++CKYStatus CKYAppletFactory_DeleteObject(CKYAPDU *apdu, const void *param);
++/* param == CKYAppletArgReadObject */
++CKYStatus CKYAppletFactory_ReadObject(CKYAPDU *apdu, const void *param);
++/* param == CKYByte * (pointer to seq) */
++CKYStatus CKYAppletFactory_ListObjects(CKYAPDU *apdu, const void *param);
++/* param == NULL */
++CKYStatus CKYAppletFactory_GetStatus(CKYAPDU *apdu, const void *param);
++/* param == NULL */
++CKYStatus CKYAppletFactory_Noop(CKYAPDU *apdu, const void *param);
++/* param == NULL */
++CKYStatus CKYAppletFactory_GetBuildID(CKYAPDU *apdu, const void *param);
++/* param == NULL */
++CKYStatus CKYAppletFactory_GetLifeCycle(CKYAPDU *apdu, const void *param);
++/* param == NULL */
++CKYStatus CKYAppletFactory_GetLifeCycleV2(CKYAPDU *apdu, const void *param);
++/* param == CKYByte * */
++CKYStatus CKYAppletFactory_GetRandom(CKYAPDU *apdu, const void *param);
++/* param == CKY_Buffer */
++CKYStatus CKYAppletFactory_SeedRandom(CKYAPDU *apdu, const void *param);
++/* param == NULL */
++CKYStatus CKYAppletFactory_GetIssuerInfo(CKYAPDU *apdu, const void *param);
++/* param == NULL */
++CKYStatus CKYAppletFactory_GetBuiltinACL(CKYAPDU *apdu, const void *param);
++/* deprecates 0.x functions */
++/* param == NULL */
++CKYStatus CKYAppletFactory_LogoutAllV0(CKYAPDU *apdu, const void *param);
++
++/*****************************************************************
++ *
++ * Generic Fill routines used by the generic APDU processing
++ * to customize how the response data is returned to the application.
++ * generally the param points to some structure which is filled in
++ * by the Fill function from the response data. Each APDU command
++ * can potentially have it's own fill function. Different appearent
++ * functions can be accomplished by calling the same APDU with a different
++ * fill function. The fill functions below are considered globally interesting
++ * to applications that wish to make custom APDU calls using the
++ * applet generic processing. Fill functions are never called directly,
++ * but through callback, and all have the same signature (CKYFillFunction)
++ *
++ *****************************************************************/
++/* a null fill function for those APDU's which do not return data */
++CKYStatus CKYAppletFill_Null(const CKYBuffer *response, CKYSize size, void *param);
++/* Buffer Fills: */
++/* Replace fill function for those APDU's which return raw data */
++/* param == CKYBuffer * */
++CKYStatus CKYAppletFill_ReplaceBuffer(const CKYBuffer *response, CKYSize size,
++ void *param);
++/* Append fill function can be used with any APDU that uses Buffer
++ * Replace. Repeated calls continuously adds more data to the buffer.
++ * Useful for repeated operations like read. */
++/* param == CKYBuffer * */
++CKYStatus CKYAppletFill_AppendBuffer(const CKYBuffer *response,
++ CKYSize size, void *param);
++/* Single value fills: Byte, Short, & Long */
++/* param == CKYByte * */
++CKYStatus CKYAppletFill_Byte(const CKYBuffer *response, CKYSize size, void *param);
++CKYStatus CKYAppletFill_Short(const CKYBuffer *response, CKYSize size, void *param);
++CKYStatus CKYAppletFill_Long(const CKYBuffer *response, CKYSize size, void *param);
++
++/*****************************************************************
++ *
++ * Utilities shared by all the fetch Cards.
++ *
++ *****************************************************************/
++/*
++ * verify the we got a successful response. Responses should include
++ * the expected data returned plus a 2 byte return code. This return
++ * code should be 0x9000 on success. The function copies the return code
++ * to apduRC if apduRC is not NULL.
++ */
++CKYBool CKYApplet_VerifyResponse(const CKYBuffer *response, CKYSize dataSize,
++ CKYISOStatus *apduRC);
++/*
++ * most commands have identical operations. This function
++ * handles these operations, isolating the differences in
++ * call back functions.
++ * It creates the ADPU using afFunc with afArg.
++ * Adds nonce if it exists.
++ * Sends the ADPU to the card through the connection conn.
++ * Checks that the response was valid (returning the responce code in apduRC.
++ * Formats the response data into fillArg with fillFunc
++ * nonce and apduRC can be NULL (no nonce is added, no status returned
++ * legal values for afArg are depened on afFunc.
++ * legal values for fillArg are depened on fillFunc.
++ */
++CKYStatus CKYApplet_HandleAPDU(CKYCardConnection *conn,
++ CKYAppletFactory afFunc, const void *afArg,
++ const CKYBuffer *nonce, CKYSize size,
++ CKYFillFunction fillFunc, void *fillArg, CKYISOStatus *apduRC);
++
++
++/*****************************************************************
++ *
++ * The following convience functions convert APDU calls
++ * into function calls, with input and output parameters.
++ * The application is still responsible for
++ * 1) creating a connection to the card,
++ * 2) Getting a transaction lock, then
++ * 3) selecting the appropriate applet (or Card manager).
++ * Except for those calls that have been noted, the appropriate applet
++ * is the CoolKey applet.
++ *
++ *****************************************************************/
++/* Select an applet. Can happen with either applet selected */
++CKYStatus CKYApplet_SelectFile(CKYCardConnection *conn, const CKYBuffer *AID,
++ CKYISOStatus *apduRC);
++
++/* Select the CoolKey applet. Special case of the above command */
++/* Can happen with either applet selected */
++CKYStatus CKYApplet_SelectCoolKeyManager(CKYCardConnection *conn,
++ CKYISOStatus *apduRC);
++
++/* Select the card manager. Can happen with either applet selected */
++CKYStatus CKYApplet_SelectCardManager(CKYCardConnection *conn,
++ CKYISOStatus *apduRC);
++/* GetCPLC data -- must be called with CM selected */
++/* fills in cplc */
++CKYStatus CKYApplet_GetCPLCData(CKYCardConnection *conn,
++ CKYAppletRespGetCPLCData *cplc, CKYISOStatus *apduRC);
++/* Get CUID. -- must be called with CM selected */
++/* special case of GetCPLCData */
++/* fills in cuid */
++CKYStatus CKYApplet_GetCUID(CKYCardConnection *conn,
++ CKYBuffer *cuid, CKYISOStatus *apduRC);
++/* Get MSN. -- must be called with CM selected */
++/* special case of GetCPLCData */
++/* returns msn */
++CKYStatus CKYApplet_GetMSN(CKYCardConnection *conn, unsigned long *msn,
++ CKYISOStatus *apduRC);
++
++/* List Keys -- see applet documentation */
++CKYStatus CKYApplet_ListKeys(CKYCardConnection *conn, CKYByte seq,
++ CKYAppletRespListKeys *lkp, CKYISOStatus *apduRC);
++/*
++ * Compute Crypt Cluster.
++ *
++ * Compute Crypt takes 3 phases: Init, Process, Final.
++ * Applications can call each phase separately using:
++ * CKYApplet_ComputeCryptInit
++ * CKYApplet_ComputeCryptProcess
++ * CKYApplet_ComputeCryptFinal
++ * or call all three in one set with:
++ * CKYApplet_ComputeCrypt
++ * Buffer values passed to Compute crypt should be raw data.
++ * The helper functions format the 2 byte length data required by the
++ * applet automatically.
++ */
++CKYStatus CKYApplet_ComputeCryptInit(CKYCardConnection *conn, CKYByte keyNumber,
++ CKYByte mode, CKYByte direction, CKYByte location,
++ const CKYBuffer *nonce, CKYISOStatus *apduRC);
++CKYStatus CKYApplet_ComputeCryptProcess(CKYCardConnection *conn, CKYByte keyNumber,
++ CKYByte location, const CKYBuffer *data, const CKYBuffer *nonce,
++ CKYISOStatus *apduRC);
++CKYStatus CKYApplet_ComputeCryptFinal(CKYCardConnection *conn, CKYByte keyNumber,
++ CKYByte location, const CKYBuffer *data, CKYBuffer *sig, CKYBuffer *result,
++ const CKYBuffer *nonce, CKYISOStatus *apduRC);
++/** ...look to data size to see if we should read/write the data to
++ * the on card buffer. (future) */
++CKYStatus CKYApplet_ComputeCrypt(CKYCardConnection *conn, CKYByte keyNumber,
++ CKYByte mode, CKYByte direction, const CKYBuffer *data, CKYBuffer *sig,
++ CKYBuffer *result, const CKYBuffer *nonce, CKYISOStatus *apduRC);
++/* Pin Command -- see applet documentation for use */
++CKYStatus CKYApplet_CreatePIN(CKYCardConnection *conn, CKYByte pinNumber,
++ CKYByte maxAttempts, const char *pinValue,
++ const CKYBuffer *nonce, CKYISOStatus *apduRC);
++CKYStatus CKYApplet_VerifyPIN(CKYCardConnection *conn, CKYByte pinNumber,
++ const char *pinValue, CKYBuffer *nonce, CKYISOStatus *apduRC);
++CKYStatus CKYApplet_ChangePIN(CKYCardConnection *conn, const char *oldPin,
++ const char *newPin, const CKYBuffer *nonce,
++ CKYISOStatus *apduRC);
++CKYStatus CKYApplet_ListPINs(CKYCardConnection *conn, unsigned short *pins,
++ CKYISOStatus *apduRC);
++CKYStatus CKYApplet_Logout(CKYCardConnection *conn, CKYByte pinNumber,
++ const CKYBuffer *nonce, CKYISOStatus *apduRC);
++/* Object Commands -- see applet documentation for use */
++CKYStatus CKYApplet_CreateObject(CKYCardConnection *conn, unsigned long objectID,
++ CKYSize size, unsigned short readACL, unsigned short writeACL,
++ unsigned short deleteACL, const CKYBuffer *nonce, CKYISOStatus *apduRC);
++CKYStatus CKYApplet_DeleteObject(CKYCardConnection *conn, unsigned long objectID,
++ CKYByte zero, const CKYBuffer *nonce, CKYISOStatus *apduRC);
++
++/* CAC commands */
++/* Select one of the CAC PKI applets. Special case of CKYApplet_SelectFile */
++/* Select the CAC card manager. Can happen with either applet selected */
++CKYStatus CACApplet_SelectCardManager(CKYCardConnection *conn,
++ CKYISOStatus *apduRC);
++/* Select the CAC CC container. Can happen with either applet selected */
++CKYStatus CACApplet_SelectCCC(CKYCardConnection *conn, CKYISOStatus *apduRC);
++/* Select an old CAC applet and fill in the cardAID */
++CKYStatus CACApplet_SelectPKI(CKYCardConnection *conn, CKYBuffer *cardAid,
++ CKYByte instance, CKYISOStatus *apduRC);
++/* read a TLV file */
++CKYStatus CACApplet_ReadFile(CKYCardConnection *conn, CKYByte type,
++ CKYBuffer *buffer, CKYISOStatus *apduRC);
++CKYStatus CACApplet_SelectFile(CKYCardConnection *conn, unsigned short ef,
++ CKYISOStatus *apduRC);
++
++
++/* must happen with PKI applet selected */
++CKYStatus CACApplet_SignDecrypt(CKYCardConnection *conn, const CKYBuffer *data,
++ CKYBuffer *result, CKYISOStatus *apduRC);
++CKYStatus CACApplet_GetCertificate(CKYCardConnection *conn, CKYBuffer *cert,
++ CKYISOStatus *apduRC);
++CKYStatus CACApplet_GetCertificateFirst(CKYCardConnection *conn,
++ CKYBuffer *cert, CKYSize *nextSize,
++ CKYISOStatus *apduRC);
++CKYStatus CACApplet_GetCertificateAppend(CKYCardConnection *conn,
++ CKYBuffer *cert, CKYSize nextSize,
++ CKYISOStatus *apduRC);
++
++/*CKYStatus CACApplet_GetProperties(); */
++CKYStatus CACApplet_VerifyPIN(CKYCardConnection *conn, const char *pin,
++ int local, CKYISOStatus *apduRC);
++
++/* Select a PIV applet */
++CKYStatus PIVApplet_Select(CKYCardConnection *conn, CKYISOStatus *apduRC);
++
++CKYStatus PIVApplet_GetCertificate(CKYCardConnection *conn, CKYBuffer *cert,
++ int tag, CKYISOStatus *apduRC);
++CKYStatus PIVApplet_SignDecrypt(CKYCardConnection *conn, CKYByte key,
++ unsigned int keySize, int derive,
++ const CKYBuffer *data, CKYBuffer *result,
++ CKYISOStatus *apduRC);
++
++/* PKCS Commands 15 */
++CKYStatus P15Applet_SelectFile(CKYCardConnection *conn, unsigned short ef,
++ CKYISOStatus *apduRC);
++CKYStatus P15Applet_SelectRootFile(CKYCardConnection *conn, unsigned short ef,
++ CKYISOStatus *apduRC);
++CKYStatus P15Applet_ReadRecord(CKYCardConnection *conn, CKYByte record,
++ CKYByte short_ef, CKYByte flags, CKYByte size, CKYBuffer *data,
++ CKYISOStatus *apduRC);
++CKYStatus P15Applet_ReadBinary(CKYCardConnection *conn, unsigned short offset,
++ CKYByte short_ef, CKYByte flags, CKYByte size, CKYBuffer *data,
++ CKYISOStatus *apduRC);
++CKYStatus P15Applet_VerifyPIN(CKYCardConnection *conn, const char *pin,
++ const P15PinInfo *pinInfo, CKYISOStatus *apduRC);
++
++CKYStatus P15Applet_SignDecrypt(CKYCardConnection *conn, CKYByte key,
++ unsigned int keySize, CKYByte direction,
++ const CKYBuffer *data, CKYBuffer *result,
++ CKYISOStatus *apduRC);
++
++/*
++ * There are 3 read commands:
++ *
++ * CKYApplet_ReadObject issues a single Read APDU call. Supplied data buffer
++ * is overwritten. This function is limited to reading 240 bytes.
++ * CKYApplet_ReadObjectAppend also issues a single Read APDU call. However,
++ * the result is appended to the data buffer. Again, this function is limited
++ * to reading 240 bytes.
++ * CKYApplet_ReadObjectFull can read an entire data object. It makes multiple
++ * apdu calls in order to read the full amount into the buffer. The buffer
++ * is overwriten.
++ */
++CKYStatus CKYApplet_ReadObject(CKYCardConnection *conn, unsigned long objectID,
++ CKYOffset offset, CKYByte size, const CKYBuffer *nonce,
++ CKYBuffer *data, CKYISOStatus *apduRC);
++
++CKYStatus CKYApplet_ReadObjectAppend(CKYCardConnection *conn,
++ unsigned long objectID, CKYOffset offset, CKYByte size,
++ const CKYBuffer *nonce, CKYBuffer *data, CKYISOStatus *apduRC);
++CKYStatus CKYApplet_ReadObjectFull(CKYCardConnection *conn,
++ unsigned long objectID, CKYOffset offset, CKYSize size,
++ const CKYBuffer *nonce, CKYBuffer *data, CKYISOStatus *apduRC);
++/*
++ * There is 1 write command:
++ * CKYApplet_WriteObjectFull can write an entire data object. It makes multiple
++ * apdu calls in order to write the full amount into the buffer. The buffer is
++ * overwritten.
++*/
++
++CKYStatus CKYApplet_WriteObjectFull(CKYCardConnection *conn,
++ unsigned long objectID, CKYOffset offset, CKYSize size,
++ const CKYBuffer *nonce, const CKYBuffer *data, CKYISOStatus *apduRC);
++
++CKYStatus CKYApplet_ListObjects(CKYCardConnection *conn, CKYByte seq,
++ CKYAppletRespListObjects *lop, CKYISOStatus *apduRC);
++CKYStatus CKYApplet_GetStatus(CKYCardConnection *conn,
++ CKYAppletRespGetStatus *status, CKYISOStatus *apduRC);
++CKYStatus CKYApplet_Noop(CKYCardConnection *conn, CKYISOStatus *apduRC);
++CKYStatus CKYApplet_GetBuildID(CKYCardConnection *conn, unsigned long *buildID,
++ CKYISOStatus *apduRC);
++CKYStatus CKYApplet_GetLifeCycle(CKYCardConnection *conn, CKYByte *personalized,
++ CKYISOStatus *apduRC);
++CKYStatus CKYApplet_GetLifeCycleV2(CKYCardConnection *conn,
++ CKYAppletRespGetLifeCycleV2 *ext, CKYISOStatus *apduRC);
++
++CKYStatus CKYApplet_GetRandom(CKYCardConnection *conn,
++ CKYBuffer *buf, CKYByte len, CKYISOStatus *apduRC);
++
++CKYStatus CKYApplet_GetRandomAppend(CKYCardConnection *conn,
++ CKYBuffer *buf, CKYByte len, CKYISOStatus *apduRC);
++
++CKYStatus CKYApplet_SeedRandom(CKYCardConnection *conn,
++ const CKYBuffer *buf, CKYISOStatus *apduRC);
++
++CKYStatus CKYApplet_GetIssuerInfo(CKYCardConnection *conn,
++ CKYBuffer *buf, CKYISOStatus *apduRC);
++
++CKYStatus CKYApplet_GetBuiltinACL(CKYCardConnection *conn,
++ CKYAppletRespGetBuiltinACL *gba, CKYISOStatus *apduRC);
++
++/** ECC commands
++ * * */
++
++CKYStatus CKYApplet_ComputeECCSignature(CKYCardConnection *conn, CKYByte keyNumber,
++ const CKYBuffer *data, CKYBuffer *sig,
++ CKYBuffer *result, const CKYBuffer *nonce, CKYISOStatus *apduRC);
++
++CKYStatus
++CKYApplet_ComputeECCKeyAgreement(CKYCardConnection *conn, CKYByte keyNumber,
++ const CKYBuffer *publicValue, CKYBuffer *sharedSecret,
++ CKYBuffer *result, const CKYBuffer *nonce, CKYISOStatus *apduRC);
++
++
++/*
++ * deprecates 0.x functions
++ */
++/* old applet verify pin call (no nonce returned) */
++CKYStatus CKYApplet_VerifyPinV0(CKYCardConnection *conn, CKYByte pinNumber,
++ const char *pinValue, CKYISOStatus *apduRC);
++/* logout all */
++CKYStatus CKYApplet_LogoutAllV0(CKYCardConnection *conn, CKYISOStatus *apduRC);
++
++CKY_END_PROTOS
++#endif /* CKY_APPLET_H */
+diff -up ./esc/src/lib/coolkey/cky_base.c.fix1 ./esc/src/lib/coolkey/cky_base.c
+--- ./esc/src/lib/coolkey/cky_base.c.fix1 2018-04-26 11:44:38.436986198 -0700
++++ ./esc/src/lib/coolkey/cky_base.c 2018-04-26 11:44:38.436986198 -0700
+@@ -0,0 +1,835 @@
++/* ***** BEGIN COPYRIGHT BLOCK *****
++ * Copyright (C) 2005 Red Hat, Inc.
++ * All rights reserved.
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation version
++ * 2.1 of the License.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
++ * ***** END COPYRIGHT BLOCK ***** */
++
++#include <string.h>
++#include <stdlib.h>
++#include <assert.h>
++#include "cky_basei.h"
++#include "cky_base.h"
++
++/*
++ * generic buffer management functions
++ *
++ * These functions allow simple buffer management used in the CoolKey
++ * library and it's clients.
++ */
++
++/* initialize a new buffer to a known state */
++static void
++ckyBuffer_initBuffer(CKYBuffer *buf)
++{
++#ifdef DEBUG
++ assert(sizeof(CKYBuffer) == sizeof(CKYBufferPublic));
++#endif
++ buf->data = NULL;
++ buf->size = 0;
++ buf->len = 0;
++ buf->reserved = NULL; /* make coverity happy */
++}
++
++/*
++ * Init functions clobbers the current contents and allocates the required
++ * space. Active buffers should call CKYBuffer_FreerData before
++ * calling an init function. All init functions copies the supplied data
++ * into newly allocated space.
++ */
++/* init an empty buffer that will later be filled in. */
++CKYStatus
++CKYBuffer_InitEmpty(CKYBuffer *buf)
++{
++ ckyBuffer_initBuffer(buf);
++ return CKYSUCCESS;
++}
++
++/* Create a buffer of length len all initialized to '0' */
++CKYStatus
++CKYBuffer_InitFromLen(CKYBuffer *buf, CKYSize len)
++{
++ CKYStatus ret;
++
++ ckyBuffer_initBuffer(buf);
++ ret = CKYBuffer_Reserve(buf, len);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ buf->len = len;
++ memset(buf->data, 0, buf->len);
++ return CKYSUCCESS;
++}
++
++static CKYByte
++fromHex(const char *cp)
++{
++ if (*cp >= '0' && *cp <= '9') {
++ return (CKYByte) *cp - '0';
++ }
++ if (*cp >= 'a' && *cp <= 'f') {
++ return (CKYByte) *cp - 'a' + 0xa;
++ }
++ if (*cp >= 'A' && *cp <= 'F') {
++ return (CKYByte) *cp - 'A' + 0xA;
++ }
++ return 0;
++}
++
++/* Create a buffer by decoding a hex string. hexString is NULL terminated. */
++CKYStatus
++CKYBuffer_InitFromHex(CKYBuffer *buf, const char *hexString)
++{
++ int len = strlen(hexString);
++ int dataHalf = 0;
++ CKYByte lastDigit = 0;
++ CKYByte digit;
++ const char *cp;
++ CKYByte *bp;
++ CKYStatus ret;
++
++ if (len & 1) {
++ len++;
++ dataHalf++;
++ }
++ ckyBuffer_initBuffer(buf);
++ ret = CKYBuffer_Reserve(buf, len/2);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ buf->len = len/2;
++ bp = buf->data;
++ for (cp = hexString; *cp; cp++) {
++ digit = fromHex(cp);
++ /* check for error? */
++ if (dataHalf) {
++ *bp++= lastDigit << 4 | digit;
++ }
++ dataHalf ^= 1;
++ lastDigit = digit;
++ }
++ return CKYSUCCESS;
++}
++
++/* Create a buffer from data */
++CKYStatus
++CKYBuffer_InitFromData(CKYBuffer *buf, const CKYByte *data, CKYSize len)
++{
++ CKYStatus ret;
++
++ ckyBuffer_initBuffer(buf);
++ ret = CKYBuffer_Reserve(buf, len);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ buf->len = len;
++ memcpy(buf->data, data, buf->len);
++ return CKYSUCCESS;
++}
++
++
++/* Create a buffer from part of another buffer. Start indicates the
++ * offset in the old buffer to start in, and len specifies how many bytes
++ * to copy */
++CKYStatus
++CKYBuffer_InitFromBuffer(CKYBuffer *buf,
++ const CKYBuffer *src, CKYOffset start, CKYSize len)
++{
++ CKYStatus ret;
++
++ ckyBuffer_initBuffer(buf);
++ if (src->len < start) {
++ len = 0;
++ } else if (src->len < start+len) {
++ len = src->len -start;
++ }
++ ret = CKYBuffer_Reserve(buf, len);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ buf->len = len;
++ if (len == 0) {
++ return CKYSUCCESS;
++ }
++ memcpy(buf->data, src->data+start, buf->len);
++ return CKYSUCCESS;
++}
++
++/* Create a buffer from and exact copy of another buffer. */
++CKYStatus
++CKYBuffer_InitFromCopy(CKYBuffer *buf, const CKYBuffer *src)
++{
++ CKYStatus ret;
++
++ ckyBuffer_initBuffer(buf);
++ /* src buffer has no length, make sure the dest is empty */
++ if (src->len == 0) {
++ return CKYSUCCESS;
++ }
++ ret = CKYBuffer_Reserve(buf, src->len);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ buf->len = src->len;
++ memcpy(buf->data, src->data, buf->len);
++ return CKYSUCCESS;
++}
++
++/*
++ * append functions increase the buffer size if necessary
++ */
++CKYStatus
++CKYBuffer_AppendChar(CKYBuffer *buf, CKYByte val)
++{
++ CKYStatus ret;
++
++ ret = CKYBuffer_Reserve(buf, buf->len + 1);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ buf->data[buf->len] = val;
++ buf->len += 1;
++ return CKYSUCCESS;
++}
++
++/* append a short in network order */
++CKYStatus
++CKYBuffer_AppendShort(CKYBuffer *buf, unsigned short val)
++{
++ CKYStatus ret;
++
++ ret = CKYBuffer_Reserve(buf, buf->len + 2);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ buf->data[buf->len+0] = (CKYByte) ((val >> 8) & 0xff);
++ buf->data[buf->len+1] = (CKYByte) ((val >> 0) & 0xff);
++ buf->len += 2;
++ return CKYSUCCESS;
++}
++
++/* append a short in network order */
++CKYStatus
++CKYBuffer_AppendShortLE(CKYBuffer *buf, unsigned short val)
++{
++ CKYStatus ret;
++
++ ret = CKYBuffer_Reserve(buf, buf->len + 2);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ buf->data[buf->len+1] = (CKYByte) ((val >> 8) & 0xff);
++ buf->data[buf->len+0] = (CKYByte) ((val >> 0) & 0xff);
++ buf->len += 2;
++ return CKYSUCCESS;
++}
++
++/* append a long in applet order */
++CKYStatus
++CKYBuffer_AppendLong(CKYBuffer *buf, unsigned long val)
++{
++ CKYStatus ret;
++
++ ret = CKYBuffer_Reserve(buf, buf->len + 4);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ buf->data[buf->len+0] = (CKYByte) ((val >> 24) & 0xff);
++ buf->data[buf->len+1] = (CKYByte) ((val >> 16) & 0xff);
++ buf->data[buf->len+2] = (CKYByte) ((val >> 8) & 0xff);
++ buf->data[buf->len+3] = (CKYByte) ((val >> 0) & 0xff);
++ buf->len += 4;
++ return CKYSUCCESS;
++}
++
++/* append a long in applet order */
++CKYStatus
++CKYBuffer_AppendLongLE(CKYBuffer *buf, unsigned long val)
++{
++ CKYStatus ret;
++
++ ret = CKYBuffer_Reserve(buf, buf->len + 4);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ buf->data[buf->len+3] = (CKYByte) ((val >> 24) & 0xff);
++ buf->data[buf->len+2] = (CKYByte) ((val >> 16) & 0xff);
++ buf->data[buf->len+1] = (CKYByte) ((val >> 8) & 0xff);
++ buf->data[buf->len+0] = (CKYByte) ((val >> 0) & 0xff);
++ buf->len += 4;
++ return CKYSUCCESS;
++}
++
++CKYStatus
++CKYBuffer_Replace(CKYBuffer *buf, CKYOffset offset, const CKYByte *data, CKYSize len)
++{
++ CKYStatus ret;
++
++ ret = CKYBuffer_Reserve(buf, offset+len);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ if (buf->len < offset + len) {
++ buf->len = offset + len;
++ }
++ memcpy(buf->data+offset, data, len);
++ return CKYSUCCESS;
++}
++
++/* append data with length of len bytes */
++CKYStatus
++CKYBuffer_AppendData(CKYBuffer *buf, const CKYByte *data, CKYSize len)
++{
++ CKYStatus ret;
++
++ ret = CKYBuffer_Reserve(buf, buf->len + len);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ memcpy(buf->data+buf->len, data, len);
++ buf->len += len;
++ return CKYSUCCESS;
++}
++
++/* append data with length of len bytes */
++CKYStatus
++CKYBuffer_AppendBuffer(CKYBuffer *buf, const CKYBuffer *src,
++ CKYOffset offset, CKYSize len)
++{
++ unsigned long maxlen = src->len - offset;
++ if ((maxlen < len) || (src->len < offset)) {
++ return CKYDATATOOLONG;
++ }
++ return CKYBuffer_AppendData(buf, src->data+offset, len);
++}
++
++/* append data with length of len bytes */
++CKYStatus
++CKYBuffer_AppendCopy(CKYBuffer *buf, const CKYBuffer *src)
++{
++ return CKYBuffer_AppendData(buf, src->data, src->len);
++}
++
++CKYStatus
++CKYBuffer_Reserve(CKYBuffer *buf, CKYSize newSize)
++{
++ if (buf->size >= newSize) {
++ return CKYSUCCESS;
++ }
++ buf->data = (CKYByte *)realloc(buf->data, newSize);
++ if (buf->data == NULL) {
++ buf->size = 0;
++ buf->len = 0;
++ return CKYNOMEM;
++ }
++ buf->size = newSize;
++ return CKYSUCCESS;
++}
++
++CKYStatus
++CKYBuffer_SetChar(CKYBuffer *buf, CKYOffset offset, CKYByte val)
++{
++ CKYStatus ret;
++
++ if (buf->len < offset+1) {
++ ret = CKYBuffer_Resize(buf,offset+1);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ }
++ buf->data[offset] = val;
++ return CKYSUCCESS;
++}
++
++CKYStatus
++CKYBuffer_SetChars(CKYBuffer *buf, CKYOffset offset, CKYByte val, CKYSize len)
++{
++ CKYStatus ret;
++
++ if (buf->len < offset+len) {
++ ret = CKYBuffer_Resize(buf,offset+len);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ }
++ memset(buf->data+offset,val, len);
++ return CKYSUCCESS;
++}
++
++CKYStatus
++CKYBuffer_SetShort(CKYBuffer *buf, CKYOffset offset, unsigned short val)
++{
++ CKYStatus ret;
++
++ if (buf->len < offset+2) {
++ ret = CKYBuffer_Resize(buf,offset+2);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ }
++ buf->data[offset+0] = (CKYByte) ((val >> 8) & 0xff);
++ buf->data[offset+1] = (CKYByte) ((val >> 0) & 0xff);
++ return CKYSUCCESS;
++}
++
++CKYStatus
++CKYBuffer_SetShortLE(CKYBuffer *buf, CKYOffset offset, unsigned short val)
++{
++ CKYStatus ret;
++
++ if (buf->len < offset+2) {
++ ret = CKYBuffer_Resize(buf,offset+2);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ }
++ buf->data[offset+1] = (CKYByte) ((val >> 8) & 0xff);
++ buf->data[offset+0] = (CKYByte) ((val >> 0) & 0xff);
++ return CKYSUCCESS;
++}
++
++CKYStatus
++CKYBuffer_SetLong(CKYBuffer *buf, CKYOffset offset, unsigned long val)
++{
++ CKYStatus ret;
++
++ if (buf->len < offset+4) {
++ ret = CKYBuffer_Resize(buf,offset+4);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ }
++ buf->data[offset+0] = (CKYByte) ((val >> 24) & 0xff);
++ buf->data[offset+1] = (CKYByte) ((val >> 16) & 0xff);
++ buf->data[offset+2] = (CKYByte) ((val >> 8) & 0xff);
++ buf->data[offset+3] = (CKYByte) ((val >> 0) & 0xff);
++ return CKYSUCCESS;
++}
++
++CKYStatus
++CKYBuffer_SetLongLE(CKYBuffer *buf, CKYOffset offset, unsigned long val)
++{
++ CKYStatus ret;
++
++ if (buf->len < offset+4) {
++ ret = CKYBuffer_Resize(buf,offset+4);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ }
++ buf->data[offset+3] = (CKYByte) ((val >> 24) & 0xff);
++ buf->data[offset+2] = (CKYByte) ((val >> 16) & 0xff);
++ buf->data[offset+1] = (CKYByte) ((val >> 8) & 0xff);
++ buf->data[offset+0] = (CKYByte) ((val >> 0) & 0xff);
++ return CKYSUCCESS;
++}
++
++CKYByte
++CKYBuffer_GetChar(const CKYBuffer *buf, CKYOffset offset)
++{
++ if (buf->len < offset+1) {
++ return 0;
++ }
++ return buf->data[offset];
++}
++
++unsigned short
++CKYBuffer_GetShort(const CKYBuffer *buf, CKYOffset offset)
++{
++ unsigned short val;
++ if (buf->len < offset+2) {
++ return 0;
++ }
++ val = ((unsigned short)buf->data[offset+0]) << 8;
++ val |= ((unsigned short)buf->data[offset+1]) << 0;
++ return val;
++}
++
++unsigned short
++CKYBuffer_GetShortLE(const CKYBuffer *buf, CKYOffset offset)
++{
++ unsigned short val;
++ if (buf->len < offset+2) {
++ return 0;
++ }
++ val = ((unsigned short)buf->data[offset+1]) << 8;
++ val |= ((unsigned short)buf->data[offset+0]) << 0;
++ return val;
++}
++
++unsigned long
++CKYBuffer_GetLong(const CKYBuffer *buf, CKYOffset offset)
++{
++ unsigned long val;
++ if (buf->len < offset+4) {
++ return 0;
++ }
++ val = ((unsigned long)buf->data[offset+0]) << 24;
++ val |= ((unsigned long)buf->data[offset+1]) << 16;
++ val |= ((unsigned long)buf->data[offset+2]) << 8;
++ val |= ((unsigned long)buf->data[offset+3]) << 0;
++ return val;
++}
++
++unsigned long
++CKYBuffer_GetLongLE(const CKYBuffer *buf, CKYOffset offset)
++{
++ unsigned long val;
++ if (buf->len < offset+4) {
++ return 0;
++ }
++ val = ((unsigned long)buf->data[offset+3]) << 24;
++ val |= ((unsigned long)buf->data[offset+2]) << 16;
++ val |= ((unsigned long)buf->data[offset+1]) << 8;
++ val |= ((unsigned long)buf->data[offset+0]) << 0;
++ return val;
++}
++
++CKYStatus
++CKYBuffer_Resize(CKYBuffer *buf, CKYSize newLen)
++{
++ CKYStatus ret;
++
++ if (buf->len < newLen) {
++ ret = CKYBuffer_Reserve(buf, newLen);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ memset(buf->data+buf->len, 0, newLen - buf->len);
++ }
++ buf->len = newLen;
++ return CKYSUCCESS;
++}
++
++/* clear out a memory buffer... including unallocated space, then
++ * set the buffer length to '0' */
++void
++CKYBuffer_Zero(CKYBuffer *buf)
++{
++ if (buf->size != 0) {
++ memset(buf->data, 0, buf->size);
++ }
++ buf->len = 0;;
++}
++
++CKYSize
++CKYBuffer_Size(const CKYBuffer *buf)
++{
++ return buf->len;
++}
++
++const CKYByte *
++CKYBuffer_Data(const CKYBuffer *buf)
++{
++ return buf->data;
++}
++
++CKYBool
++CKYBuffer_DataIsEqual(const CKYBuffer *buf1, const CKYByte *buf2, CKYSize buf2Len)
++{
++ if (buf1->len != buf2Len) {
++ return 0;
++ }
++
++ /* all zero length buffers are equal, whether or not they have pointers
++ * allocated */
++ if (buf1->len == 0) {
++ return 1;
++ }
++
++ return memcmp(buf1->data, buf2, buf1->len) == 0;
++}
++
++CKYBool
++CKYBuffer_IsEqual(const CKYBuffer *buf1, const CKYBuffer *buf2)
++{
++ return CKYBuffer_DataIsEqual(buf1, buf2->data, buf2->len);
++}
++
++CKYStatus
++CKYBuffer_FreeData(CKYBuffer *buf)
++{
++ free(buf->data);
++ ckyBuffer_initBuffer(buf);
++ return CKYSUCCESS;
++}
++
++CKYStatus
++CKYAPDU_Init(CKYAPDU *apdu)
++{
++#ifdef DEBUG
++ assert(sizeof(CKYAPDU) == sizeof(CKYAPDUPublic));
++#endif
++ ckyBuffer_initBuffer(&apdu->apduBuf);
++ apdu->reserved = NULL;
++ return CKYBuffer_Resize(&apdu->apduBuf, CKYAPDU_MIN_LEN);
++}
++
++CKYStatus
++CKYAPDU_InitFromData(CKYAPDU *apdu, const CKYByte *data, CKYSize len)
++{
++#ifdef DEBUG
++ assert(sizeof(CKYAPDU) == sizeof(CKYAPDUPublic));
++#endif
++ ckyBuffer_initBuffer(&apdu->apduBuf);
++ apdu->reserved = NULL;
++ if (len > CKYAPDU_MAX_DATA_LEN) {
++ return CKYDATATOOLONG;
++ }
++ return CKYBuffer_InitFromData(&apdu->apduBuf, data, len);
++}
++
++CKYStatus
++CKYAPDU_FreeData(CKYAPDU *apdu)
++{
++ return CKYBuffer_FreeData(&apdu->apduBuf);
++}
++
++
++CKYByte
++CKYAPDU_GetCLA(const CKYAPDU *apdu)
++{
++ return CKYBuffer_GetChar(&apdu->apduBuf, CKY_CLA_OFFSET);
++}
++
++CKYStatus
++CKYAPDU_SetCLA(CKYAPDU *apdu, CKYByte b)
++{
++ return CKYBuffer_SetChar(&apdu->apduBuf, CKY_CLA_OFFSET, b);
++}
++
++CKYByte
++CKYAPDU_GetINS(const CKYAPDU *apdu)
++{
++ return CKYBuffer_GetChar(&apdu->apduBuf, CKY_INS_OFFSET);
++}
++
++CKYStatus
++CKYAPDU_SetINS(CKYAPDU *apdu, CKYByte b)
++{
++ return CKYBuffer_SetChar(&apdu->apduBuf, CKY_INS_OFFSET, b);
++}
++
++CKYByte
++CKYAPDU_GetP1(const CKYAPDU *apdu)
++{
++ return CKYBuffer_GetChar(&apdu->apduBuf, CKY_P1_OFFSET);
++}
++
++CKYStatus
++CKYAPDU_SetP1(CKYAPDU *apdu, CKYByte b)
++{
++ return CKYBuffer_SetChar(&apdu->apduBuf, CKY_P1_OFFSET, b);
++}
++
++CKYByte
++CKYAPDU_GetP2(const CKYAPDU *apdu)
++{
++ return CKYBuffer_GetChar(&apdu->apduBuf, CKY_P2_OFFSET);
++}
++
++CKYStatus
++CKYAPDU_SetP2(CKYAPDU *apdu, CKYByte b)
++{
++ return CKYBuffer_SetChar(&apdu->apduBuf, CKY_P2_OFFSET, b);
++}
++
++CKYStatus
++CKYAPDU_SetSendData(CKYAPDU *apdu, const CKYByte *data, CKYSize len)
++{
++ CKYStatus ret;
++ CKYOffset offset = 0;
++
++ /* Encode with T1 if necessary */
++
++ if (len < CKYAPDU_MAX_DATA_LEN) {
++ offset = 0;
++ ret = CKYBuffer_Resize(&apdu->apduBuf, len+offset+CKYAPDU_HEADER_LEN);
++ if (ret != CKYSUCCESS ) {
++ return ret;
++ }
++ ret = CKYBuffer_SetChar(&apdu->apduBuf, CKY_LC_OFFSET, (CKYByte) len);
++ } else if (len < CKYAPDU_MAX_T1_DATA_LEN) {
++ offset = 2;
++ ret = CKYBuffer_Resize(&apdu->apduBuf, len+offset+CKYAPDU_HEADER_LEN);
++ if (ret != CKYSUCCESS ) {
++ return ret;
++ }
++ ret = CKYBuffer_SetChar(&apdu->apduBuf, CKY_LC_OFFSET, (CKYByte) 0);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ ret = CKYBuffer_SetShort(&apdu->apduBuf,CKY_LC_OFFSET+1,
++ (unsigned short)len);
++ } else {
++ return CKYDATATOOLONG;
++ }
++
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ return CKYBuffer_Replace(&apdu->apduBuf,
++ CKYAPDU_HEADER_LEN + offset , data, len);
++}
++
++CKYStatus
++CKYAPDU_SetSendDataBuffer(CKYAPDU *apdu, const CKYBuffer *buf)
++{
++ return CKYAPDU_SetSendData(apdu, buf->data, buf->len);
++}
++
++CKYStatus
++CKYAPDU_AppendSendData(CKYAPDU *apdu, const CKYByte *data, CKYSize len)
++{
++ CKYStatus ret;
++ CKYSize dataLen;
++
++ if (CKYBuffer_Size(&apdu->apduBuf) <= CKYAPDU_MIN_LEN) {
++ return CKYAPDU_SetSendData(apdu,data, len);
++ }
++
++ dataLen = CKYBuffer_Size(&apdu->apduBuf) + len - CKYAPDU_HEADER_LEN;
++ /* only handles T0 encoding, not T1 encoding */
++ if (dataLen >= CKYAPDU_MAX_DATA_LEN) {
++ return CKYDATATOOLONG;
++ }
++ ret = CKYBuffer_AppendData(&apdu->apduBuf, data, len);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ return CKYBuffer_SetChar(&apdu->apduBuf, CKY_LC_OFFSET, (CKYByte) dataLen);
++}
++
++CKYStatus
++CKYAPDU_AppendSendDataBuffer(CKYAPDU *apdu, const CKYBuffer *buf)
++{
++ return CKYAPDU_AppendSendData(apdu, buf->data, buf->len);
++}
++
++CKYStatus
++CKYAPDU_SetReceiveLen(CKYAPDU *apdu, CKYByte recvlen)
++{
++ CKYStatus ret;
++ ret = CKYBuffer_Resize(&apdu->apduBuf, CKYAPDU_HEADER_LEN);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ return CKYBuffer_SetChar(&apdu->apduBuf, CKY_LE_OFFSET, recvlen);
++}
++
++CKYStatus
++CKYAPDU_SetShortReceiveLen(CKYAPDU *apdu, unsigned short recvlen)
++{
++ CKYStatus ret;
++
++ if (recvlen <= CKYAPDU_MAX_DATA_LEN) {
++ return CKYAPDU_SetReceiveLen(apdu, (CKYByte)(recvlen & 0xff));
++ }
++ ret = CKYBuffer_Resize(&apdu->apduBuf, CKYAPDU_HEADER_LEN+2);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ ret = CKYBuffer_SetChar(&apdu->apduBuf, CKY_LE_OFFSET, 0);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ return CKYBuffer_SetShort(&apdu->apduBuf, CKY_LE_OFFSET+1, recvlen);
++}
++
++CKYStatus
++CKYAPDU_SetReceiveLength(CKYAPDU *apdu, CKYSize recvlen)
++{
++ if (recvlen <= CKYAPDU_MAX_T1_DATA_LEN) {
++ return CKYAPDU_SetShortReceiveLen(apdu, (unsigned short)
++ (recvlen & 0xffff));
++ }
++ return CKYDATATOOLONG;
++}
++
++/*
++ * Append Le, If Le=0, treat it as 256 (CKYAPD_MAX_DATA_LEN)
++ */
++CKYStatus
++CKYAPDU_AppendReceiveLen(CKYAPDU *apdu, CKYByte recvlen)
++{
++ /* If we already have a data buffer, make sure that we aren't already
++ * using T1 encoding */
++ if (CKYBuffer_Size(&apdu->apduBuf) > CKYAPDU_MIN_LEN) {
++ if (CKYBuffer_GetChar(&apdu->apduBuf, CKY_LC_OFFSET) == 0) {
++ /* we are using T1 encoding, use AppendShort*/
++ return CKYBuffer_AppendShort(&apdu->apduBuf,
++ recvlen ? (unsigned short) recvlen: CKYAPDU_MAX_DATA_LEN);
++ }
++ }
++ return CKYBuffer_AppendChar(&apdu->apduBuf, recvlen);
++}
++
++/*
++ * Append a short Le. If Le be encoded with just T0, do so. If Le=0 treat
++ * it as 65536 (CKYAPDU_MAX_T1_DATA_LEN)
++ */
++CKYStatus
++CKYAPDU_AppendShortReceiveLen(CKYAPDU *apdu, unsigned short recvlen)
++{
++ CKYStatus ret;
++ /* If we already have a data buffer, it's encoding affects ours */
++ if (CKYBuffer_Size(&apdu->apduBuf) > CKYAPDU_MIN_LEN) {
++ /* CKY_LC_OFFSET == 0 means T1, otherwise it's T0 */
++ if (CKYBuffer_GetChar(&apdu->apduBuf, CKY_LC_OFFSET) != 0) {
++ /* remember 0 is 65536 here */
++ if ((recvlen == 0) || (recvlen > CKYAPDU_MAX_DATA_LEN)) {
++ /* we can't a encode T1 receive length if we already have a
++ * T0 encoded buffer data */
++ return CKYDATATOOLONG;
++ }
++ /* T0 encoding */
++ return CKYBuffer_AppendChar(&apdu->apduBuf, (CKYByte)recvlen&0xff);
++ }
++ /* T1 encoding */
++ return CKYBuffer_AppendShort(&apdu->apduBuf, recvlen);
++ }
++ /* if length fits in a bit and we aren't forced into T1 encoding, use
++ * T0 */
++ if ((recvlen != 0) && (recvlen <= CKYAPDU_MAX_DATA_LEN)) {
++ return CKYBuffer_AppendChar(&apdu->apduBuf, (CKYByte)recvlen&0xff);
++ }
++ /* write the T1 encoding marker */
++ ret = CKYBuffer_AppendChar(&apdu->apduBuf, (CKYByte)0);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ /* T1 encoded length */
++ return CKYBuffer_AppendShort(&apdu->apduBuf, recvlen);
++}
++
++CKYStatus
++CKYAPDU_AppendReceiveLength(CKYAPDU *apdu, CKYSize recvlen)
++{
++ if (recvlen > CKYAPDU_MAX_T1_DATA_LEN) {
++ return CKYDATATOOLONG;
++ }
++ return CKYAPDU_AppendShortReceiveLen(apdu,
++ (unsigned short)(recvlen & 0xffff));
++}
++
++
++void
++CKY_SetName(const char *p)
++{
++}
++
++
++
++
+diff -up ./esc/src/lib/coolkey/cky_base.h.fix1 ./esc/src/lib/coolkey/cky_base.h
+--- ./esc/src/lib/coolkey/cky_base.h.fix1 2018-04-26 11:44:38.437986192 -0700
++++ ./esc/src/lib/coolkey/cky_base.h 2018-04-26 11:44:38.437986192 -0700
+@@ -0,0 +1,340 @@
++/* ***** BEGIN COPYRIGHT BLOCK *****
++ * Copyright (C) 2005 Red Hat, Inc.
++ * All rights reserved.
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation version
++ * 2.1 of the License.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
++ * ***** END COPYRIGHT BLOCK ***** */
++
++#ifndef CKY_BASE_H
++#define CKY_BASE_H 1
++
++/*
++ * Common types and structs
++ */
++/* buffer sizes */
++typedef unsigned long CKYSize;
++/* offsets into buffers are data */
++typedef unsigned long CKYOffset;
++/* bytes, buffers */
++typedef unsigned char CKYByte;
++/* Bool type */
++typedef unsigned char CKYBool;
++
++typedef unsigned long CKYBitFlags;
++
++#define CKYBUFFER_PUBLIC \
++ unsigned long reserved1;\
++ unsigned long reserved2;\
++ void *reserved3;\
++ void *reserved4;
++
++#define CKYAPDU_PUBLIC \
++ unsigned long reserved1;\
++ unsigned long reserved2;\
++ void *reserved3;\
++ void *reserved4; \
++ void *reserved5;
++
++
++typedef struct _CKYBuffer {
++#ifdef CKYBUFFER_PRIVATE
++ CKYBUFFER_PRIVATE
++#else
++ CKYBUFFER_PUBLIC
++#endif
++} CKYBuffer;
++
++typedef struct _CKYAPDU {
++#ifdef CKYAPDU_PRIVATE
++ CKYAPDU_PRIVATE
++#else
++ CKYAPDU_PUBLIC
++#endif
++} CKYAPDU;
++
++/*
++ * the following is just to make sure the sizes match
++ */
++#ifdef DEBUG
++#ifdef CKYBUFFER_PRIVATE
++typedef struct _CKYBufferPublic {
++ CKYBUFFER_PUBLIC
++} CKYBufferPublic;
++
++typedef struct _CKYAPDUPublic {
++ CKYAPDU_PUBLIC
++} CKYAPDUPublic;
++#endif
++#endif
++
++typedef enum {
++ CKYSUCCESS, /* operation completed successfully */
++ CKYNOMEM, /* failed to allocate memory */
++ CKYDATATOOLONG, /* index or length exceeded a buffer or device size */
++ CKYNOSCARD, /* Scard library does not exist */
++ CKYSCARDERR, /* I/O Error in the SCard interface level. */
++ /* more specific error values can be queried from
++ * the context or connection with the
++ * GetLastError() call */
++ CKYLIBFAIL, /* error is shared library. no additional
++ * error is available. Only returned from internal
++ * SHlib calls (not surfaced in public APIs */
++ CKYAPDUFAIL, /* processing worked, but applet rejected the APDU
++ * (command) sent. ADPUIOStatus has more info on
++ * why the APDU failed */
++ CKYINVALIDARGS, /* Caller passed in bad args */
++ CKYINVALIDDATA, /* Data supplied was invalid */
++ CKYUNSUPPORTED, /* Requested Operation or feature is not supported */
++} CKYStatus;
++
++/*
++ * defines related to APDU's
++ */
++#define CKY_CLA_OFFSET 0
++#define CKY_INS_OFFSET 1
++#define CKY_P1_OFFSET 2
++#define CKY_P2_OFFSET 3
++#define CKY_P3_OFFSET 4 /* P3 is P3, LC, and LE depending on usage */
++#define CKY_LC_OFFSET 4
++#define CKY_LE_OFFSET 4
++
++#define CKYAPDU_MAX_DATA_LEN 256
++#define CKYAPDU_MAX_T1_DATA_LEN 65536
++#define CKYAPDU_MIN_LEN 4
++#define CKYAPDU_HEADER_LEN 5
++#define CKYAPDU_MAX_LEN (CKYAPDU_HEADER_LEN+CKYAPDU_MAX_DATA_LEN)
++#define CKY_MAX_ATR_LEN 32
++#define CKY_OUTRAGEOUS_MALLOC_SIZE (1024*1024)
++
++#define P15FlagsPrivate 0x00000001
++#define P15FlagsModifiable 0x00000002
++
++#define P15UsageEncrypt 0x00000001
++#define P15UsageDecrypt 0x00000002
++#define P15UsageSign 0x00000004
++#define P15UsageSignRecover 0x00000008
++#define P15UsageWrap 0x00000010
++#define P15UsageUnwrap 0x00000020
++#define P15UsageVerify 0x00000040
++#define P15UsageVerifyRecover 0x00000080
++#define P15UsageDerive 0x00000100
++#define P15UsageNonRepudiation 0x00000200
++
++#define P15AccessSensitive 0x00000001
++#define P15AccessExtractable 0x00000002
++#define P15AccessAlwaysSenstive 0x00000004
++#define P15AccessNeverExtractable 0x00000008
++#define P15AccessLocal 0x00000010
++
++#define P15PinCaseSensitive 0x00000001
++#define P15PinLocal 0x00000002
++#define P15PinChangeDisabled 0x00000004
++#define P15PinUnblockDisabled 0x00000008
++#define P15PinInitialized 0x00000010
++#define P15PinNeedsPadding 0x00000020
++#define P15PinUnblockingPin 0x00000040
++#define P15PinSOPin 0x00000080
++#define P15PinDisableAllowed 0x00000100
++
++typedef enum {P15PinBCD=0, P15PinASCIINum=1, P15PinUTF8=2} P15PinType;
++
++typedef struct _P15PinInfo {
++ CKYBitFlags pinFlags;
++ P15PinType pinType;
++ CKYByte minLength;
++ CKYByte storedLength;
++ unsigned long maxLength;
++ CKYByte pinRef;
++ CKYByte padChar;
++} P15PinInfo;
++
++
++/*
++ * allow direct inclusion in C++ files
++ */
++#ifdef __cplusplus
++#define CKY_BEGIN_PROTOS extern "C" {
++#define CKY_END_PROTOS }
++#else
++#define CKY_BEGIN_PROTOS
++#define CKY_END_PROTOS
++#endif
++
++CKY_BEGIN_PROTOS
++/*
++ * generic buffer management functions
++ *
++ * These functions allow simple buffer management used in the CoolKey
++ * library and it's clients.
++ */
++
++/*
++ * Init functions clobbers the current contents and allocates the required
++ * space.
++ * - Active buffers should call CKYBuffer_FreeData before calling an init
++ * function.
++ * - New buffers should call some CKYBuffer_Init function before any use.
++ * - All init functions copies the supplied data into newly allocated space.
++ */
++/* Create an empty buffer with no memory allocated to it. This is sufficient
++ * to begin using a buffer. Note that new calls will probably allocate memory.
++ * It is safe to free an empty buffer. */
++CKYStatus CKYBuffer_InitEmpty(CKYBuffer *buf);
++
++/* Create a buffer of length len all initialized to '0' */
++CKYStatus CKYBuffer_InitFromLen(CKYBuffer *buf, CKYSize len);
++
++/* Create a buffer by decoding a hex string. hexString is NULL terminated. */
++CKYStatus CKYBuffer_InitFromHex(CKYBuffer *buf, const char *hexString);
++
++/* Create a buffer from data */
++CKYStatus CKYBuffer_InitFromData(CKYBuffer *buf, const CKYByte *data, CKYSize len);
++
++/* Create a buffer from part of another buffer. Start indicates the
++ * offset in the old buffer to start in, and len specifies how many bytes
++ * to copy */
++CKYStatus CKYBuffer_InitFromBuffer(CKYBuffer *buf, const CKYBuffer *src,
++ CKYOffset start, CKYSize len);
++/* Create a buffer from an exact copy of another buffer */
++CKYStatus CKYBuffer_InitFromCopy(CKYBuffer *buf, const CKYBuffer *src);
++/*
++ * append functions increase the buffer size if necessary
++ */
++/* append a short in applet order */
++CKYStatus CKYBuffer_AppendChar(CKYBuffer *buf, CKYByte b);
++
++/* append a short in applet order */
++CKYStatus CKYBuffer_AppendShort(CKYBuffer *buf, unsigned short val);
++
++/* append a short in little endian order */
++CKYStatus CKYBuffer_AppendShortLE(CKYBuffer *buf, unsigned short val);
++
++/* append a long in applet order */
++CKYStatus CKYBuffer_AppendLong(CKYBuffer *buf, unsigned long val);
++
++/* append a long in little endian order */
++CKYStatus CKYBuffer_AppendLongLE(CKYBuffer *buf, unsigned long val);
++
++/* append data. the data starts at data and extends len bytes */
++CKYStatus CKYBuffer_AppendData(CKYBuffer *buf, const CKYByte *data, CKYSize len);
++
++/* append buffer fragment. the data starts at buffer[offset]
++ * and extends len bytes */
++CKYStatus CKYBuffer_AppendBuffer(CKYBuffer *buf, const CKYBuffer *src,
++ CKYOffset offset, CKYSize len);
++
++/* append a full buffer */
++CKYStatus CKYBuffer_AppendCopy(CKYBuffer *buf, const CKYBuffer *src );
++
++/* reserve increases the space allocated for the buffer, but does not
++ * increase the actual buffer size. If the buffer already newSize or more
++ * space allocated, Reserve is a no op.
++ */
++CKYStatus CKYBuffer_Reserve(CKYBuffer *buf, CKYSize newSize) ;
++
++/* resize affects the buffer's size. If the buffer len increases,
++ * the new date will be zero'ed out. If the buffer shrinks, the buffer
++ * is truncated, but the space is not removed.
++ */
++CKYStatus CKYBuffer_Resize(CKYBuffer *buf, CKYSize newLen);
++
++/* replace bytes starting at 'offset'. If the buffer needs to be extended,
++ * it will be automatically */
++CKYStatus CKYBuffer_Replace(CKYBuffer *buf, CKYOffset offset, const CKYByte *data,
++ CKYSize len);
++
++/* set byte at ofset. The buffer is extended to offset if necessary */
++CKYStatus CKYBuffer_SetChar(CKYBuffer *buf, CKYOffset offset, CKYByte c);
++/* set several copies of 'c' at from offset to offset+ len */
++CKYStatus CKYBuffer_SetChars(CKYBuffer *buf, CKYOffset offset,
++ CKYByte c, CKYSize len);
++/* These functions work in applet order */
++CKYStatus CKYBuffer_SetShort(CKYBuffer *buf, CKYOffset offset, unsigned short val);
++CKYStatus CKYBuffer_SetLong(CKYBuffer *buf, CKYOffset offset, unsigned long val);
++
++/* These functions work in little endian order */
++CKYStatus CKYBuffer_SetShortLE(CKYBuffer *buf, CKYOffset offset, unsigned short val);
++CKYStatus CKYBuffer_SetLongLE(CKYBuffer *buf, CKYOffset offset, unsigned long val);
++/* read a character from offset. If offset is beyond the end of the buffer,
++ * then the function returns '0' */
++CKYByte CKYBuffer_GetChar(const CKYBuffer *buf, CKYOffset offset);
++/* These functions work in applet order */
++unsigned short CKYBuffer_GetShort(const CKYBuffer *buf, CKYOffset offset);
++unsigned long CKYBuffer_GetLong(const CKYBuffer *buf, CKYOffset offset);
++/* These functions work in little endian order */
++unsigned short CKYBuffer_GetShortLE(const CKYBuffer *buf, CKYOffset offset);
++unsigned long CKYBuffer_GetLongLE(const CKYBuffer *buf, CKYOffset offset);
++
++/* clear out all the data in a buffer */
++void CKYBuffer_Zero(CKYBuffer *buf);
++
++/* return the size (length) of a buffer. This is only the portion of the
++ * buffer that has valid data set. */
++CKYSize CKYBuffer_Size(const CKYBuffer *buf);
++
++/* return a pointer to the data buffer */
++const CKYByte *CKYBuffer_Data(const CKYBuffer *buf);
++
++/* compare two buffers return :
++ * 1 if the two buffers are equal,
++ * 0 if they are not */
++CKYBool CKYBuffer_IsEqual(const CKYBuffer *buf1, const CKYBuffer *buf2);
++/* compares raw data with a buffer or equality */
++CKYBool CKYBuffer_DataIsEqual(const CKYBuffer *buf1,
++ const CKYByte *buf2, CKYSize buf2Len);
++
++/* free all the data associated with a buffer and initialize the buffer */
++CKYStatus CKYBuffer_FreeData(CKYBuffer *buf);
++
++/*
++ * APDU's are buffers that know about the APDU structure
++ */
++CKYStatus CKYAPDU_Init(CKYAPDU *apdu);
++CKYStatus CKYAPDU_InitFromData(CKYAPDU *apdu, const CKYByte *data, CKYSize size);
++CKYStatus CKYAPDU_FreeData(CKYAPDU *apdu);
++
++/* Access APDU header bytes */
++CKYByte CKYAPDU_GetCLA(const CKYAPDU *apdu);
++CKYStatus CKYAPDU_SetCLA(CKYAPDU *apdu, CKYByte b);
++CKYByte CKYAPDU_GetINS(const CKYAPDU *apdu);
++CKYStatus CKYAPDU_SetINS(CKYAPDU *apdu, CKYByte b);
++CKYByte CKYAPDU_GetP1(const CKYAPDU *apdu);
++CKYStatus CKYAPDU_SetP1(CKYAPDU *apdu, CKYByte b);
++CKYByte CKYAPDU_GetP2(const CKYAPDU *apdu);
++CKYStatus CKYAPDU_SetP2(CKYAPDU *apdu, CKYByte b);
++
++/* add sending date to the APDU */
++/* Set resets the buffer, append, adds the data to the end. Lc in
++ * the APDU header is automaticallu updated */
++CKYStatus CKYAPDU_SetSendData(CKYAPDU *apdu, const CKYByte *data, CKYSize len);
++CKYStatus CKYAPDU_SetSendDataBuffer(CKYAPDU *apdu, const CKYBuffer *buf);
++CKYStatus CKYAPDU_AppendSendData(CKYAPDU *apdu, const CKYByte *data, CKYSize len);
++CKYStatus CKYAPDU_AppendSendDataBuffer(CKYAPDU *apdu, const CKYBuffer *buf);
++
++/* set Le in the APDU header to the amount of bytes expected to be
++ * returned. */
++CKYStatus CKYAPDU_SetReceiveLen(CKYAPDU *apdu, CKYByte recvlen);
++CKYStatus CKYAPDU_SetShortReceiveLen(CKYAPDU *apdu, unsigned short recvlen);
++CKYStatus CKYAPDU_SetReceiveLength(CKYAPDU *apdu, CKYSize recvlen);
++CKYStatus CKYAPDU_AppendReceiveLen(CKYAPDU *apdu, CKYByte recvlen);
++CKYStatus CKYAPDU_AppendShortReceiveLen(CKYAPDU *apdu, unsigned short recvlen);
++CKYStatus CKYAPDU_AppendReceiveLength(CKYAPDU *apdu, CKYSize recvlen);
++
++/* set the parent loadmodule name */
++void CKY_SetName(const char *name);
++
++CKY_END_PROTOS
++
++#endif /* CKY_BASE_H */
+diff -up ./esc/src/lib/coolkey/cky_basei.h.fix1 ./esc/src/lib/coolkey/cky_basei.h
+--- ./esc/src/lib/coolkey/cky_basei.h.fix1 2018-04-26 11:44:38.437986192 -0700
++++ ./esc/src/lib/coolkey/cky_basei.h 2018-04-26 11:44:38.437986192 -0700
+@@ -0,0 +1,35 @@
++/* ***** BEGIN COPYRIGHT BLOCK *****
++ * Copyright (C) 2005 Red Hat, Inc.
++ * All rights reserved.
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation version
++ * 2.1 of the License.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
++ * ***** END COPYRIGHT BLOCK ***** */
++
++#ifndef CKY_BASE_H
++#ifndef CKY_BASEI_H
++#define CKY_BASEI_H 1
++
++#define CKYBUFFER_PRIVATE \
++ CKYSize len; \
++ CKYSize size; \
++ CKYByte *data; \
++ void *reserved;
++
++#define CKYAPDU_PRIVATE \
++ CKYBuffer apduBuf; \
++ void *reserved;
++
++#endif /* CKY_BASE_H */
++#endif /* CKY_BASEI_H */
+diff -up ./esc/src/lib/coolkey/cky_card.c.fix1 ./esc/src/lib/coolkey/cky_card.c
+--- ./esc/src/lib/coolkey/cky_card.c.fix1 2018-04-26 11:44:38.437986192 -0700
++++ ./esc/src/lib/coolkey/cky_card.c 2018-04-26 11:44:38.437986192 -0700
+@@ -0,0 +1,1226 @@
++/* ***** BEGIN COPYRIGHT BLOCK *****
++ * Copyright (C) 2005 Red Hat, Inc.
++ * All rights reserved.
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation version
++ * 2.1 of the License.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
++ * ***** END COPYRIGHT BLOCK ***** */
++
++#include <winscard.h>
++#include <stdlib.h>
++#include <string.h>
++#include "cky_basei.h" /* friend class */
++#include "cky_base.h"
++#include "cky_card.h"
++#include "dynlink.h"
++
++#ifndef WINAPI
++#define WINAPI
++typedef SCARD_READERSTATE *LPSCARD_READERSTATE;
++#endif
++
++#ifndef SCARD_E_NO_READERS_AVAILABLE
++#define SCARD_E_NO_READERS_AVAILABLE ((unsigned long)0x8010002EL)
++#endif
++
++#define NEW(type,count) (type *)malloc((count)*sizeof(type))
++
++/*
++ * protect against scard API not being installed.
++ */
++
++typedef long (WINAPI * SCardEstablishContextFn) (
++ unsigned long dwScope,
++ const void * pvReserved1,
++ const void * pvReserved2,
++ LPSCARDCONTEXT phContext);
++
++typedef long (WINAPI * SCardReleaseContextFn) (
++ SCARDCONTEXT hContext);
++
++typedef long (WINAPI * SCardBeginTransactionFn) (
++ long hCard);
++
++typedef long (WINAPI * SCardEndTransactionFn) (
++ long hCard,
++ unsigned long dwDisposition);
++
++typedef long (WINAPI * SCardConnectFn) (
++ SCARDCONTEXT hContext,
++ const char *szReader,
++ unsigned long dwShareMode,
++ unsigned long dwPreferredProtocols,
++ long *phCard,
++ unsigned long *pdwActiveProtocol);
++
++typedef long (WINAPI * SCardDisconnectFn) (
++ long hCard,
++ unsigned long dwDisposition);
++
++typedef long (WINAPI * SCardTransmitFn) (
++ long hCard,
++ LPCSCARD_IO_REQUEST pioSendPci,
++ const unsigned char *pbSendBuffer,
++ unsigned long cbSendLength,
++ LPSCARD_IO_REQUEST pioRecvPci,
++ unsigned char *pbRecvBuffer,
++ unsigned long *pcbRecvLength);
++
++typedef long (WINAPI * SCardReconnectFn) (
++ long hCard,
++ unsigned long dwShareMode,
++ unsigned long dwPreferredProtocols,
++ unsigned long dwInitialization,
++ unsigned long *pdwActiveProtocol);
++
++typedef long (WINAPI * SCardListReadersFn) (
++ SCARDCONTEXT hContext,
++ const char *mszGroups,
++ char *mszReaders,
++ unsigned long *pcchReaders);
++
++typedef long (WINAPI * SCardStatusFn) (
++ long hCard,
++ char *mszReaderNames,
++ unsigned long *pcchReaderLen,
++ unsigned long *pdwState,
++ unsigned long *pdwProtocol,
++ unsigned char *pbAtr,
++ unsigned long *pcbAtrLen);
++
++typedef long (WINAPI * SCardGetAttribFn) (
++ long hCard,
++ unsigned long dwAttId,
++ char *pbAttr,
++ unsigned long *pchAttrLen);
++
++typedef long (WINAPI * SCardGetStatusChangeFn) (
++ SCARDCONTEXT hContext,
++ unsigned long dwTimeout,
++ LPSCARD_READERSTATE rgReaderStates,
++ unsigned long cReaders);
++
++typedef long (WINAPI * SCardCancelFn) (
++ SCARDCONTEXT hContext);
++
++typedef struct _SCard {
++ SCardEstablishContextFn SCardEstablishContext;
++ SCardReleaseContextFn SCardReleaseContext;
++ SCardBeginTransactionFn SCardBeginTransaction;
++ SCardEndTransactionFn SCardEndTransaction;
++ SCardConnectFn SCardConnect;
++ SCardDisconnectFn SCardDisconnect;
++ SCardTransmitFn SCardTransmit;
++ SCardReconnectFn SCardReconnect;
++ SCardListReadersFn SCardListReaders;
++ SCardStatusFn SCardStatus;
++ SCardGetAttribFn SCardGetAttrib;
++ SCardGetStatusChangeFn SCardGetStatusChange;
++ SCardCancelFn SCardCancel;
++ SCARD_IO_REQUEST *SCARD_PCI_T0_;
++ SCARD_IO_REQUEST *SCARD_PCI_T1_;
++} SCard;
++
++#define GET_ADDRESS(library, scard, name) \
++ status= ckyShLibrary_getAddress(library, \
++ (void**) &scard->name, MAKE_DLL_SYMBOL(name)); \
++ if (status != CKYSUCCESS) { \
++ goto fail; \
++ }
++
++#ifdef WIN32
++#define SCARD_LIB_NAME "winscard.dll"
++#else
++#ifdef MAC
++#define SCARD_LIB_NAME "PCSC.Framework/PCSC"
++#else
++#ifdef LINUX
++#define SCARD_LIB_NAME "libpcsclite.so"
++#else
++#ifndef SCARD_LIB_NAME
++#error "define wincard library for this platform"
++#endif
++#endif
++#endif
++#endif
++
++static SCard *
++ckySCard_Init(void)
++{
++ ckyShLibrary library;
++ CKYStatus status;
++ SCard *scard = NEW(SCard, 1);
++
++ if (!scard) {
++ return NULL;
++ }
++
++ library = ckyShLibrary_open(SCARD_LIB_NAME);
++ if (!library) {
++ goto fail;
++ }
++
++ GET_ADDRESS(library, scard, SCardEstablishContext);
++ GET_ADDRESS(library, scard, SCardReleaseContext);
++ GET_ADDRESS(library, scard, SCardBeginTransaction);
++ GET_ADDRESS(library, scard, SCardEndTransaction);
++ /* expands to SCardConnectA on Windows */
++ GET_ADDRESS(library, scard, SCardConnect);
++ GET_ADDRESS(library, scard, SCardDisconnect);
++ GET_ADDRESS(library, scard, SCardTransmit);
++ GET_ADDRESS(library, scard, SCardReconnect);
++ /* expands to SCardListReadersA on Windows */
++ GET_ADDRESS(library, scard, SCardListReaders);
++ /* expands to SCardStatusA on Windows */
++ GET_ADDRESS(library, scard, SCardStatus);
++#ifdef WIN32
++ GET_ADDRESS(library, scard, SCardGetAttrib);
++#endif
++ /* SCardGetStatusChangeA */
++ GET_ADDRESS(library, scard, SCardGetStatusChange);
++ GET_ADDRESS(library, scard, SCardCancel);
++
++ status = ckyShLibrary_getAddress( library,
++ (void**) &scard->SCARD_PCI_T0_, MAKE_DLL_SYMBOL(g_rgSCardT0Pci));
++ if( status != CKYSUCCESS ) {
++ goto fail;
++ }
++
++ status = ckyShLibrary_getAddress( library,
++ (void**) &scard->SCARD_PCI_T1_, MAKE_DLL_SYMBOL(g_rgSCardT1Pci));
++ if( status != CKYSUCCESS ) {
++ goto fail;
++ }
++ return scard;
++
++fail:
++ if (library) {
++ ckyShLibrary_close(library);
++ }
++ free(scard);
++ return NULL;
++}
++/*
++ * Implement CKYReaderNameLists and CKYCardConnectionLists
++ */
++/* make the list code happy */
++static void
++CKYReaderName_Destroy(char *data) {
++ free(data);
++}
++
++#include "cky_list.i" /* implemnentation of the lists define by cky_list.h */
++CKYLIST_IMPLEMENT(CKYReaderName, char *)
++CKYLIST_IMPLEMENT(CKYCardConnection, CKYCardConnection *)
++
++
++/*
++ * CKReader objects represent Readers attached to the system.
++ * The objects themselves are really SCard SCARD_READERSTATE objects.
++ * These objects are used in 2 ways:
++ * 1) the application creates static SCARD_READERSTATE's and use
++ * CKYReader_Init() to initialize the structure. In this case
++ * the application can call any of the reader 'methods' (functions
++ * starting with CKReader) on these objects. When finished the
++ * application is responsible for calling CKYReader_FreeData() to free
++ * any data held by the reader object.
++ * 2) Acquire an array of readers with CKYReader_CreateArray(). In this
++ * case the application can call any method on any particular array member
++ * In the end the Application is responsible for calling
++ * CKYReader_DestroyArray() to free the entire array.
++ */
++
++void
++CKYReader_Init(SCARD_READERSTATE *reader)
++{
++ reader->szReader = NULL;
++ reader->pvUserData = 0;
++ reader->cbAtr = 0;
++ reader->dwCurrentState = SCARD_STATE_UNAWARE;
++}
++
++void
++CKYReader_FreeData(SCARD_READERSTATE *reader)
++{
++ if (reader->szReader) {
++ free((void *)reader->szReader);
++ }
++ CKYReader_Init(reader);
++}
++
++CKYStatus
++CKYReader_SetReaderName(SCARD_READERSTATE *reader, const char *name)
++{
++ free((void *)reader->szReader);
++ reader->szReader = strdup(name);
++ return (reader->szReader)? CKYSUCCESS: CKYNOMEM;
++}
++
++const char *
++CKYReader_GetReaderName(const SCARD_READERSTATE *reader)
++{
++ return reader->szReader;
++}
++
++/* see openSC or PCSC for the semantics of Known State and Event States */
++CKYStatus
++CKYReader_SetKnownState(SCARD_READERSTATE *reader, unsigned long state)
++{
++ reader->dwCurrentState = state;
++ return CKYSUCCESS;
++}
++
++unsigned long
++CKYReader_GetKnownState(const SCARD_READERSTATE *reader)
++{
++ return reader->dwCurrentState;
++}
++
++unsigned long
++CKYReader_GetEventState(const SCARD_READERSTATE *reader)
++{
++ return reader->dwEventState;
++}
++
++/* Caller must have init'ed the buffer before calling
++ * any data in the existing buffer is overwritten */
++CKYStatus
++CKYReader_GetATR(const SCARD_READERSTATE *reader, CKYBuffer *buf)
++{
++ CKYStatus ret;
++
++ ret = CKYBuffer_Resize(buf, reader->cbAtr);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ return CKYBuffer_Replace(buf, 0, reader->rgbAtr, reader->cbAtr);
++}
++
++SCARD_READERSTATE *
++CKYReader_CreateArray(const CKYReaderNameList readerNames,
++ unsigned long *returnReaderCount)
++{
++ unsigned long i,j;
++ unsigned long readerCount;
++ SCARD_READERSTATE *readers;
++ CKYStatus ret;
++
++ readerCount=CKYReaderNameList_GetCount(readerNames);
++ if (readerCount == 0) {
++ return NULL;
++ }
++ readers = NEW(SCARD_READERSTATE, readerCount);
++ if (readers == NULL) {
++ return NULL;
++ }
++
++ for (i=0; i < readerCount; i++) {
++ CKYReader_Init(&readers[i]);
++ ret = CKYReader_SetReaderName(&readers[i],
++ CKYReaderNameList_GetValue(readerNames,i));
++ if (ret != CKYSUCCESS) {
++ break;
++ }
++ }
++ if (ret != CKYSUCCESS) {
++ for (j=0; j < i; j++) {
++ CKYReader_FreeData(&readers[j]);
++ }
++ free(readers);
++ return NULL;
++ }
++ if (returnReaderCount) {
++ *returnReaderCount=readerCount;
++ }
++
++ return readers;
++}
++
++/*
++ * add more reader states to an existing reader state array.
++ * The existing reader will have a new pointer, which will be updated only
++ * after the new one is complete, and before the old one is freed. The 'add'
++ * array is not modified or freed.
++ */
++CKYStatus
++CKYReader_AppendArray(SCARD_READERSTATE **array, unsigned long arraySize,
++ const char **readerNames, unsigned long numReaderNames)
++{
++ unsigned long i,j;
++ SCARD_READERSTATE *readers;
++ SCARD_READERSTATE *old;
++ CKYStatus ret = CKYSUCCESS;
++
++ readers = NEW(SCARD_READERSTATE, arraySize+numReaderNames);
++ if (readers == NULL) {
++ return CKYNOMEM;
++ }
++ /* copy the original readers, inheriting all the pointer memory */
++ memcpy(readers, *array, arraySize*sizeof(SCARD_READERSTATE));
++
++ /* initialize and add the new reader states. */
++ for (i=0; i < numReaderNames; i++) {
++ CKYReader_Init(&readers[i+arraySize]);
++ ret = CKYReader_SetReaderName(&readers[i+arraySize],readerNames[i]);
++ if (ret != CKYSUCCESS) {
++ break;
++ }
++ }
++
++ /* we failed, only free the new reader states, ownership of the new
++ * ones will revert back to the original */
++ if (ret != CKYSUCCESS) {
++ for (j=0; j < i; j++) {
++ CKYReader_FreeData(&readers[j+arraySize]);
++ }
++ free(readers);
++ return ret;
++ }
++
++ /* Now we swap the readers states */
++ old = *array;
++ *array = readers;
++ /* it's now safe to free the old one */
++ free(old);
++
++ return CKYSUCCESS;
++}
++
++void
++CKYReader_DestroyArray(SCARD_READERSTATE *reader, unsigned long readerCount)
++{
++ unsigned long i;
++
++ for (i=0; i < readerCount; i++) {
++ CKYReader_FreeData(&reader[i]);
++ }
++ free(reader);
++}
++
++/*
++ * CKYCardContexts are wrapped access to the SCard Context, which is
++ * part of the openSC/ Microsoft PCSC interface. Applications will
++ * typically open one context to get access to the SCard Subsystem.
++ *
++ * To protect ourselves from systems without the SCard library installed,
++ * the SCard calls are looked up from the library and called through
++ * a function pointer.
++ */
++struct _CKYCardContext {
++ SCARDCONTEXT context;
++ SCard *scard;
++ unsigned long scope;
++ unsigned long lastError;
++};
++
++
++static CKYStatus
++ckyCardContext_init(CKYCardContext *ctx)
++{
++ static SCard *scard;
++
++ ctx->lastError = 0;
++ ctx->context = 0;
++ if (!scard) {
++ scard = ckySCard_Init();
++ if (!scard) {
++ return CKYNOSCARD;
++ }
++ }
++ ctx->scard = scard;
++ return CKYSUCCESS;
++}
++
++static CKYStatus
++ckyCardContext_release(CKYCardContext *ctx)
++{
++ unsigned long rv = ctx->scard->SCardReleaseContext(ctx->context);
++ ctx->context = 0;
++ if (rv != SCARD_S_SUCCESS) {
++ ctx->lastError = rv;
++ return CKYSCARDERR;
++ }
++ return CKYSUCCESS;
++}
++
++static CKYStatus
++ckyCardContext_establish(CKYCardContext *ctx, unsigned long scope)
++{
++ unsigned long rv;
++
++ if (ctx->context) {
++ ckyCardContext_release(ctx);
++ }
++ rv = ctx->scard->SCardEstablishContext(scope, NULL, NULL, &ctx->context);
++ if (rv != SCARD_S_SUCCESS) {
++ ctx->lastError = rv;
++ return CKYSCARDERR;
++ }
++ return CKYSUCCESS;
++}
++
++CKYCardContext *
++CKYCardContext_Create(unsigned long scope)
++{
++ CKYCardContext *ctx;
++ CKYStatus ret;
++
++ ctx = NEW(CKYCardContext, 1);
++ if (ctx == NULL) {
++ return NULL;
++ }
++ ret = ckyCardContext_init(ctx);
++ if (ret != CKYSUCCESS) {
++ CKYCardContext_Destroy(ctx);
++ return NULL;
++ }
++ ctx->scope = scope;
++ ret = ckyCardContext_establish(ctx, scope);
++#ifdef MAC
++/* Apple won't establish a connnection if pcscd is not running. Because of
++ * the way securityd controls pcscd, this may not necessarily be an error
++ * condition. Detect this case and continue. We'll establish the connection
++ * later..
++ */
++ if (ctx->lastError == SCARD_F_INTERNAL_ERROR) {
++ ctx->context = 0; /* make sure it's not established */
++ return ctx;
++ }
++#endif
++ if (ret != CKYSUCCESS) {
++ CKYCardContext_Destroy(ctx);
++ return NULL;
++ }
++ return ctx;
++}
++
++CKYStatus
++CKYCardContext_Destroy(CKYCardContext *ctx)
++{
++ CKYStatus ret = CKYSUCCESS;
++ if (ctx == NULL) {
++ return CKYSUCCESS;
++ }
++ if (ctx->context) {
++ ret = ckyCardContext_release(ctx);
++ }
++ free(ctx);
++ return ret;
++}
++
++SCARDCONTEXT
++CKYCardContext_GetContext(const CKYCardContext *ctx)
++{
++ return ctx->context;
++}
++
++CKYStatus
++CKYCardContext_ListReaders(CKYCardContext *ctx, CKYReaderNameList *readerNames)
++{
++ unsigned long readerLen;
++ unsigned long rv;
++ char * readerStr = NULL;
++ char *cur;
++ char ** readerList;
++ int count,i;
++
++
++ /* return NULL in the case nothing is found, or there is an error */
++ *readerNames = NULL;
++
++ /* if we aren't established yet, do so now */
++ if (!ctx->context) {
++ CKYStatus ret = ckyCardContext_establish(ctx, ctx->scope);
++ if (ret != CKYSUCCESS) {
++
++#ifdef MAC
++ if (ctx->lastError == SCARD_F_INTERNAL_ERROR) {
++ /* Still can't establish, just treat it as 'zero' readers */
++ return CKYSUCCESS;
++ }
++#endif
++ return ret;
++ }
++ }
++
++ /* get the initial length */
++ readerLen = 0;
++ rv = ctx->scard->SCardListReaders(ctx->context, NULL /*groups*/,
++ NULL, &readerLen);
++ /* handle the other errors from SCardListReaders */
++ if (rv == SCARD_E_NO_READERS_AVAILABLE) {
++ /* not really an error: there are no readers */
++ return CKYSUCCESS;
++ }
++
++ if( rv != SCARD_S_SUCCESS ) {
++ ctx->lastError = rv;
++ return CKYSCARDERR;
++ }
++
++ /* if no readers, return OK and a NULL list */
++ if (readerLen == 0) {
++ return CKYSUCCESS;
++ }
++
++ /*
++ * Keep trying to read in the buffer, allowing that the required buffer
++ * length may change between calls to SCardListReaders.
++ */
++ do {
++ if (readerLen < 1 || readerLen > CKY_OUTRAGEOUS_MALLOC_SIZE) {
++ return CKYNOMEM;
++ }
++ readerStr = NEW(char,readerLen);
++ if (readerStr == NULL) {
++ return CKYNOMEM;
++ }
++
++ rv = ctx->scard->SCardListReaders(ctx->context, NULL /*groups*/,
++ readerStr, &readerLen);
++
++ /* we've found it, pop out with readerStr allocated */
++ if (rv == SCARD_S_SUCCESS) {
++ break;
++ }
++
++ /* Nope, free the reader we allocated */
++ free(readerStr);
++ readerStr = NULL;
++
++ } while( rv == SCARD_E_INSUFFICIENT_BUFFER );
++
++ /* handle the other errors from SCardListReaders */
++ if (rv == SCARD_E_NO_READERS_AVAILABLE) {
++ /* not really an error: there are no readers */
++ ctx->lastError = SCARD_E_NO_READERS_AVAILABLE;
++ return CKYSUCCESS;
++ }
++ if (rv != SCARD_S_SUCCESS) {
++ /* stash the error and fail */
++ ctx->lastError = rv;
++ return CKYSCARDERR;
++ }
++
++ /*
++ * Windows returns the list of readers as a series of null terminated
++ * strings, terminated with an additional NULL. For example, if there
++ * are three readers name "Reader 1", "Reader 2", "Reader 3", the returned
++ * readerStr would look like: "Reader 1\0Reader 2\0Reader N\0\0".
++ *
++ * We need to return a list of ReaderNames. This is currently a pointer
++ * to an array of string pointers, terminated by a NULL.
++ *
++ * +--------------+
++ * | Reader 1 ptr | -> "Reader 1"
++ * +--------------+
++ * | Reader 2 ptr | -> "Reader 2"
++ * +--------------+
++ * | Reader N ptr | -> "Reader N"
++ * +--------------+
++ * | NULL |
++ * +--------------+
++ *
++ * NOTE: This code explicitly knows the underlying format for
++ * CKYReaderNameLists defined in cky_list.i. If cky_list.i is changes,
++ * this code will need to be changed as well.
++ */
++ /* find the count of readers */
++ for (cur = readerStr, count = 0; *cur; cur += strlen(cur)+1, count++ )
++ /* Empty */ ;
++ readerList = NEW(char *,count+1);
++ if (readerList == NULL) {
++ goto fail;
++ }
++
++ /* now copy the readers into the array */
++ for (i=0, cur=readerStr; i < count ; cur+=strlen(cur) +1, i++) {
++ readerList[i] = strdup(cur);
++ if (readerList[i] == NULL) {
++ goto fail;
++ }
++ }
++ readerList[count] = NULL;
++ free(readerStr);;
++ *readerNames = (CKYReaderNameList) readerList;
++ return CKYSUCCESS;
++
++fail:
++ if (readerStr) {
++ free(readerStr);
++ }
++ if (readerList) {
++ CKYReaderNameList_Destroy((CKYReaderNameList) readerList);
++ }
++ return CKYNOMEM;
++}
++
++/*
++ * The original C++ API had to very similiar functions that returned
++ * either reader names or connections based on ATR. This is a single
++ * function that can return both. The exported interface calls this
++ * one with one of the lists set to NULL.
++ *
++ * NOTE: this function "knows" the underlying format for lists and
++ * hand builds the related lists.
++ */
++CKYStatus
++ckyCardContext_findReadersByATR(CKYCardContext *ctx,
++ CKYReaderNameList *returnReaders,
++ CKYCardConnectionList *returnConn,
++ const CKYBuffer *targetATR)
++{
++ CKYReaderNameList readerNames;
++ CKYBuffer ATR;
++ CKYCardConnection **connList = NULL;
++ CKYCardConnection **connPtr = NULL;
++ char **readerList = NULL;
++ char **readerPtr = NULL;
++ int readerCount, i;
++ CKYStatus ret;
++
++ CKYBuffer_InitEmpty(&ATR);
++
++ /* if we aren't established yet, do so now */
++ if (!ctx->context) {
++ ret = ckyCardContext_establish(ctx, ctx->scope);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ }
++
++ /* initialize our returned values to empty */
++ if (returnReaders) {
++ *returnReaders = NULL;
++ }
++ if (returnConn) {
++ *returnConn = NULL;
++ }
++
++ ret = CKYCardContext_ListReaders(ctx, &readerNames);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++
++ readerCount = CKYReaderNameList_GetCount(readerNames);
++
++ /* none found, return success */
++ if (readerCount == 0) {
++ CKYReaderNameList_Destroy(readerNames);
++ return CKYSUCCESS;
++ }
++
++ /* now initialize our name and connection lists */
++ if (returnConn) {
++ connList = NEW(CKYCardConnection *, readerCount);
++ connPtr = connList;
++ if (connList == NULL) {
++ goto fail;
++ }
++ }
++ if (returnReaders) {
++ readerList = NEW(char *, readerCount);
++ readerPtr = readerList;
++ if (readerList == NULL) {
++ goto fail;
++ }
++ }
++
++ ret = CKYBuffer_Resize(&ATR, CKY_MAX_ATR_LEN);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++
++ /* now walk the reader list trying to get connections */
++ for (i=0; i < readerCount ; i++) {
++ CKYCardConnection * conn = CKYCardConnection_Create(ctx);
++ unsigned long state;
++ const char *thisReader = CKYReaderNameList_GetValue(readerNames, i);
++
++
++ if (!conn) {
++ goto loop;
++ }
++ ret = CKYCardConnection_Connect(conn, thisReader);
++ if (ret != CKYSUCCESS) {
++ goto loop;
++ }
++ ret = CKYCardConnection_GetStatus(conn, &state, &ATR);
++ if (ret != CKYSUCCESS) {
++ goto loop;
++ }
++ if (CKYBuffer_IsEqual(targetATR, &ATR)) {
++ if (connPtr) {
++ *connPtr++ = conn; /* adopt */
++ conn = NULL;
++ }
++ if (readerPtr) {
++ *readerPtr++ = strdup(thisReader);
++ }
++ }
++
++loop:
++ /* must happen each time through the loop */
++ if (conn) {
++ CKYCardConnection_Destroy(conn);
++ }
++ }
++
++ /* done with the reader names now */
++ CKYReaderNameList_Destroy(readerNames);
++ /* and the ATR buffer */
++ CKYBuffer_FreeData(&ATR);
++
++ /* terminate out lists and return them */
++ if (readerPtr) {
++ *readerPtr = NULL;
++ *returnReaders = (CKYReaderNameList) readerList;
++ }
++ if (connPtr) {
++ *connPtr = NULL;
++ *returnConn = (CKYCardConnectionList) connList;
++ }
++ return CKYSUCCESS;
++
++fail:
++ if (readerNames) {
++ CKYReaderNameList_Destroy(readerNames);
++ }
++ if (connList) {
++ free(connList);
++ }
++ if (readerList) {
++ free(readerList);
++ }
++ CKYBuffer_FreeData(&ATR);
++ return CKYNOMEM;
++}
++
++CKYStatus
++CKYCardContext_FindCardsByATR(CKYCardContext *ctx,
++ CKYCardConnectionList *cardList, const CKYBuffer *targetATR)
++{
++ return ckyCardContext_findReadersByATR(ctx, NULL, cardList, targetATR);
++}
++
++CKYStatus
++CKYCardContext_FindReadersByATR(CKYCardContext *ctx,
++ CKYReaderNameList *readerNames, const CKYBuffer *targetATR)
++{
++ return ckyCardContext_findReadersByATR(ctx, readerNames, NULL, targetATR);
++}
++
++CKYCardConnection *
++CKYCardContext_CreateConnection(CKYCardContext *ctx)
++{
++ return CKYCardConnection_Create(ctx);
++}
++
++CKYStatus
++CKYCardContext_WaitForStatusChange(CKYCardContext *ctx,
++ SCARD_READERSTATE *readers, unsigned long readerCount,
++ unsigned long timeout)
++{
++ unsigned long rv;
++
++ /* if we aren't established yet, do so now */
++ if (!ctx->context) {
++ CKYStatus ret = ckyCardContext_establish(ctx, ctx->scope);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ }
++ rv = ctx->scard->SCardGetStatusChange(ctx->context, timeout,
++ readers, readerCount);
++ if (rv != SCARD_S_SUCCESS) {
++ if ((rv == SCARD_E_NO_SERVICE) || (rv == SCARD_E_SERVICE_STOPPED)) {
++ /* if we were stopped, don't reuse the old context,
++ * pcsc-lite hangs */
++ ckyCardContext_release(ctx);
++ }
++ ctx->lastError = rv;
++ return CKYSCARDERR;
++ }
++ return CKYSUCCESS;
++}
++
++CKYStatus
++CKYCardContext_Cancel(CKYCardContext *ctx)
++{
++ unsigned long rv;
++
++ /* if we aren't established yet, we can't be in change status then */
++ if (!ctx->context) {
++ return CKYSUCCESS;
++ }
++ rv = ctx->scard->SCardCancel(ctx->context);
++
++ if (rv != SCARD_S_SUCCESS) {
++ ctx->lastError = rv;
++ return CKYSCARDERR;
++ }
++ return CKYSUCCESS;
++}
++
++unsigned long
++CKYCardContext_GetLastError(const CKYCardContext *ctx)
++{
++ return ctx->lastError;
++}
++
++/*
++ * Connections represent the connection to the actual smart cards.
++ * Applications usually has one of these for each card inserted in
++ * the system. Connections are where we can get information about
++ * each card, as well as transmit commands (APDU's) to the card.
++ */
++/* In the originaly C++ library, lastError was set to the last return
++ * code from any SCARD call. In this C version of the library, lastError
++ * is the last non-successful SCARD call. lastError will be set
++ * if the function returns CKYSCARDERR.
++ */
++struct _CKYCardConnection {
++ const CKYCardContext *ctx;
++ SCard *scard; /* cache a copy from the context */
++ SCARDHANDLE cardHandle;
++ unsigned long lastError;
++ CKYBool inTransaction;
++ unsigned long protocol;
++};
++
++static void
++ckyCardConnection_init(CKYCardConnection *conn, const CKYCardContext *ctx)
++{
++ conn->ctx = ctx;
++ conn->scard = ctx->scard;
++ conn->cardHandle = 0;
++ conn->lastError = 0;
++ conn->inTransaction = 0;
++ conn->protocol = SCARD_PROTOCOL_T0;
++}
++
++
++CKYCardConnection *
++CKYCardConnection_Create(const CKYCardContext *ctx)
++{
++ CKYCardConnection *conn;
++
++ /* don't even try if we don't have a Card Context */
++ if (ctx == NULL) {
++ return NULL;
++ }
++
++ conn = NEW(CKYCardConnection, 1);
++ if (conn == NULL) {
++ return NULL;
++ }
++ ckyCardConnection_init(conn, ctx);
++ return conn;
++}
++
++
++CKYStatus
++CKYCardConnection_Destroy(CKYCardConnection *conn)
++{
++ if (conn == NULL) {
++ return CKYSUCCESS;
++ }
++ if (conn->inTransaction) {
++ CKYCardConnection_EndTransaction(conn);
++ }
++ CKYCardConnection_Disconnect(conn);
++ free(conn);
++ return CKYSUCCESS;
++}
++
++CKYStatus
++CKYCardConnection_Connect(CKYCardConnection *conn, const char *readerName)
++{
++ CKYStatus ret;
++ unsigned long rv;
++
++ ret = CKYCardConnection_Disconnect(conn);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ rv = conn->scard->SCardConnect( conn->ctx->context, readerName,
++ SCARD_SHARE_SHARED, SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1, &conn->cardHandle, &conn->protocol);
++ if (rv != SCARD_S_SUCCESS) {
++ conn->lastError = rv;
++ return CKYSCARDERR;
++ }
++ return CKYSUCCESS;
++}
++
++CKYStatus
++CKYCardConnection_Disconnect(CKYCardConnection *conn)
++{
++ unsigned long rv;
++ if (conn->cardHandle == 0) {
++ return CKYSUCCESS;
++ }
++ rv = conn->scard->SCardDisconnect( conn->cardHandle, SCARD_LEAVE_CARD);
++ conn->cardHandle = 0;
++ if (rv != SCARD_S_SUCCESS) {
++ conn->lastError = rv;
++ return CKYSCARDERR;
++ }
++ return CKYSUCCESS;
++}
++
++CKYBool
++CKYCardConnection_IsConnected(const CKYCardConnection *conn)
++{
++ return (conn->cardHandle != 0);
++}
++
++unsigned long
++CKYCardConnection_GetProtocol(const CKYCardConnection *conn)
++{
++ return conn->protocol;
++}
++
++CKYStatus
++ckyCardConnection_reconnectRaw(CKYCardConnection *conn, unsigned long init)
++{
++ unsigned long rv;
++ unsigned long protocol;
++
++ rv = conn->scard->SCardReconnect(conn->cardHandle,
++ SCARD_SHARE_SHARED, SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1 , init, &protocol);
++ if (rv != SCARD_S_SUCCESS) {
++ conn->lastError = rv;
++ return CKYSCARDERR;
++ }
++ conn->protocol = protocol;
++ return CKYSUCCESS;
++}
++
++CKYStatus
++CKYCardConnection_Reconnect(CKYCardConnection *conn)
++{
++ return ckyCardConnection_reconnectRaw(conn, SCARD_LEAVE_CARD);
++}
++
++CKYStatus CKYCardConnection_Reset(CKYCardConnection *conn)
++{
++ return ckyCardConnection_reconnectRaw(conn, SCARD_RESET_CARD);
++}
++
++CKYStatus
++CKYCardConnection_BeginTransaction(CKYCardConnection *conn)
++{
++ unsigned long rv;
++ rv = conn->scard->SCardBeginTransaction(conn->cardHandle);
++ if (rv != SCARD_S_SUCCESS) {
++ conn->lastError = rv;
++ return CKYSCARDERR;
++ }
++ conn->inTransaction = 1;
++ return CKYSUCCESS;
++}
++
++CKYStatus
++CKYCardConnection_EndTransaction(CKYCardConnection *conn)
++{
++ unsigned long rv;
++ if (!conn->inTransaction) {
++ return CKYSUCCESS; /* C++ library returns success in this case, but
++ * it may be better to return an error ? */
++ }
++ rv = conn->scard->SCardEndTransaction(conn->cardHandle, SCARD_LEAVE_CARD);
++ conn->inTransaction = 0;
++ if (rv != SCARD_S_SUCCESS) {
++ conn->lastError = rv;
++ return CKYSCARDERR;
++ }
++ return CKYSUCCESS;
++}
++
++CKYStatus
++CKYCardConnection_TransmitAPDU(CKYCardConnection *conn, CKYAPDU *apdu,
++ CKYBuffer *response)
++{
++ CKYStatus ret;
++ unsigned long rv;
++
++ ret = CKYBuffer_Resize(response, CKYAPDU_MAX_LEN);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++
++ if( conn->protocol == SCARD_PROTOCOL_T0 ) {
++ rv = conn->scard->SCardTransmit(conn->cardHandle,
++ conn->scard->SCARD_PCI_T0_,
++ CKYBuffer_Data(&apdu->apduBuf), CKYBuffer_Size(&apdu->apduBuf),
++ NULL, response->data, &response->len);
++ } else {
++ rv = conn->scard->SCardTransmit(conn->cardHandle,
++ conn->scard->SCARD_PCI_T1_,
++ CKYBuffer_Data(&apdu->apduBuf), CKYBuffer_Size(&apdu->apduBuf),
++ NULL, response->data, &response->len);
++ }
++
++ if (rv != SCARD_S_SUCCESS) {
++ conn->lastError =rv;
++ return CKYSCARDERR;
++ }
++
++ return CKYSUCCESS;
++}
++
++CKYStatus
++CKYCardConnection_ExchangeAPDU(CKYCardConnection *conn, CKYAPDU *apdu,
++ CKYBuffer *response)
++{
++ CKYStatus ret;
++ CKYBuffer getResponse;
++ CKYSize size = 0;
++
++ ret = CKYCardConnection_TransmitAPDU(conn, apdu, response);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ CKYBuffer_InitEmpty(&getResponse);
++
++ /* automatically handle the response data protocol */
++ while ((ret == CKYSUCCESS) &&
++ (size = CKYBuffer_Size(response)) >= 2 &&
++ (CKYBuffer_GetChar(response,size-2) == 0x61)) {
++ /* get the response */
++ CKYAPDU getResponseAPDU;
++
++ CKYBuffer_Zero(&getResponse);
++ CKYAPDU_Init(&getResponseAPDU);
++ CKYAPDU_SetCLA(&getResponseAPDU, 0x00);
++ CKYAPDU_SetINS(&getResponseAPDU, 0xc0);
++ CKYAPDU_SetP1(&getResponseAPDU, 0x00);
++ CKYAPDU_SetP2(&getResponseAPDU, 0x00);
++ CKYAPDU_SetReceiveLen(&getResponseAPDU,
++ CKYBuffer_GetChar(response,size-1));
++ ret = CKYCardConnection_TransmitAPDU(conn, &getResponseAPDU,
++ &getResponse);
++ CKYAPDU_FreeData(&getResponseAPDU);
++ if ((ret == CKYSUCCESS) && (CKYBuffer_Size(&getResponse) >= 2)) {
++ CKYBuffer_Resize(response, size-2);
++ CKYBuffer_AppendCopy(response,&getResponse);
++ }
++ }
++ CKYBuffer_FreeData(&getResponse);
++ return ret;
++}
++
++CKYStatus
++CKYCardConnection_GetStatus(CKYCardConnection *conn,
++ unsigned long *state, CKYBuffer *ATR)
++{
++ unsigned long readerLen = 0;
++ unsigned long protocol;
++ unsigned long rv;
++ CKYSize atrLen;
++ char *readerStr;
++ CKYStatus ret;
++
++
++ /*
++ * Get initial length. We have to do all this because the Muscle
++ * implementation of PCSC requires us to supply a non-NULL argument
++ * for readerName before it will tell us the ATR, which is all we really
++ * care about.
++ */
++ rv = conn->scard->SCardStatus(conn->cardHandle,
++ NULL /*readerName*/, &readerLen, state, &protocol, NULL, &atrLen);
++ if ( rv != SCARD_S_SUCCESS ) {
++ conn->lastError = rv;
++ return CKYSCARDERR;
++ }
++
++ do {
++ if (readerLen < 1 || readerLen > CKY_OUTRAGEOUS_MALLOC_SIZE) {
++ return CKYNOMEM;
++ }
++ /* Mac & Linux return '0' or ATR length, just use the max value */
++ if (atrLen == 0) {
++ atrLen = CKY_MAX_ATR_LEN;
++ }
++ if (atrLen < 1 || atrLen > CKY_OUTRAGEOUS_MALLOC_SIZE) {
++ return CKYNOMEM;
++ }
++ ret = CKYBuffer_Resize(ATR, atrLen);
++ if (ret != CKYSUCCESS) {
++ return ret;
++ }
++ readerStr = NEW(char, readerLen);
++ if (readerStr == NULL) {
++ return CKYNOMEM;
++ }
++
++ rv = conn->scard->SCardStatus(conn->cardHandle, readerStr, &readerLen,
++ state, &protocol, ATR->data, &atrLen);
++ ATR->len = atrLen;
++ free(readerStr);
++ } while (rv == SCARD_E_INSUFFICIENT_BUFFER);
++
++ if (rv != SCARD_S_SUCCESS) {
++ conn->lastError = rv;
++ return CKYSCARDERR;
++ }
++ return CKYSUCCESS;
++}
++
++CKYStatus
++CKYCardConnection_GetAttribute(CKYCardConnection *conn,
++ unsigned long attrID, CKYBuffer *attrBuf)
++{
++#ifdef WIN32
++ unsigned long len = 0;
++ unsigned long rv;
++
++ /*
++ * Get initial length. We have to do all this because the Muscle
++ * implementation of PCSC requires us to supply a non-NULL argument
++ * for readerName before it will tell us the ATR, which is all we really
++ * care about.
++ */
++ rv = conn->scard->SCardGetAttrib(conn->cardHandle, attrID, NULL, &len);
++ if ( rv != SCARD_S_SUCCESS ) {
++ conn->lastError = rv;
++ return CKYSCARDERR;
++ }
++ CKYBuffer_Resize(attrBuf, len);
++
++ rv = conn->scard->SCardGetAttrib(conn->cardHandle, attrID,
++ attrBuf->data, &attrBuf->len);
++ if( rv != SCARD_S_SUCCESS ) {
++ conn->lastError = rv;
++ return CKYSCARDERR;
++ }
++ return CKYSUCCESS;
++#else
++ conn->lastError = -1;
++ return CKYSCARDERR;
++#endif
++}
++
++const CKYCardContext *
++CKYCardConnection_GetContext(const CKYCardConnection *conn)
++{
++ return conn->ctx;
++}
++
++unsigned long
++CKYCardConnection_GetLastError(const CKYCardConnection *conn)
++{
++ return conn->lastError;
++}
+diff -up ./esc/src/lib/coolkey/cky_card.h.fix1 ./esc/src/lib/coolkey/cky_card.h
+--- ./esc/src/lib/coolkey/cky_card.h.fix1 2018-04-26 11:44:38.439986181 -0700
++++ ./esc/src/lib/coolkey/cky_card.h 2018-04-26 11:44:38.439986181 -0700
+@@ -0,0 +1,132 @@
++/* ***** BEGIN COPYRIGHT BLOCK *****
++ * Copyright (C) 2005 Red Hat, Inc.
++ * All rights reserved.
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation version
++ * 2.1 of the License.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
++ * ***** END COPYRIGHT BLOCK ***** */
++
++#ifndef CKY_CARD_H
++#define CKY_CARD_H 1
++
++#include <winscard.h>
++
++#include "cky_base.h"
++#include "cky_list.h"
++
++/*
++ * hide the structure of CardConnections and CardContexts
++ */
++typedef struct _CKYCardContext CKYCardContext;
++typedef struct _CKYCardConnection CKYCardConnection;
++
++/*
++ * define CKYReaderNameList, CKYReaderNameIterator, CKYCardConnectionList, and
++ * CKYCardConnectionIterator, and their associated functions.
++ * See cky_list.h for these functions .
++ */
++
++CKYLIST_DECLARE(CKYReaderName, char *)
++CKYLIST_DECLARE(CKYCardConnection, CKYCardConnection *)
++
++CKY_BEGIN_PROTOS
++void CKYReader_Init(SCARD_READERSTATE *reader);
++void CKYReader_FreeData(SCARD_READERSTATE *reader);
++
++/*
++ * "Accessors": for SCARD_READERSTATE structure as a class.
++ * These functions take an SCARD_READERSTATE which can also be referenced
++ * directly.
++ */
++CKYStatus CKYReader_SetReaderName(SCARD_READERSTATE *reader, const char *name);
++const char *CKYReader_GetReaderName(const SCARD_READERSTATE *reader);
++CKYStatus CKYReader_SetKnownState(SCARD_READERSTATE *reader,
++ unsigned long state);
++unsigned long CKYReader_GetKnownState(const SCARD_READERSTATE *reader);
++unsigned long CKYReader_GetEventState(const SCARD_READERSTATE *reader);
++CKYStatus CKYReader_GetATR(const SCARD_READERSTATE *reader, CKYBuffer *buf);
++/* create an array of READERSTATEs from a LIST of Readers */
++SCARD_READERSTATE *CKYReader_CreateArray(const CKYReaderNameList readerNames,
++ unsigned long *readerCount);
++/* frees the reader, then the full array */
++void CKYReader_DestroyArray(SCARD_READERSTATE *reader, unsigned long count);
++/* add more elements to a ReaderState array*/
++CKYStatus
++CKYReader_AppendArray(SCARD_READERSTATE **array, unsigned long arraySize,
++ const char **readerNames, unsigned long numReaderNames);
++
++/*
++ * card contexts wrap Microsoft's SCARDCONTEXT.
++ */
++/* create a new one. SCOPE must be SCOPE_USER */
++CKYCardContext *CKYCardContext_Create(unsigned long scope);
++/* destroy an existing one */
++CKYStatus CKYCardContext_Destroy(CKYCardContext *context);
++/* get the Windows handle associated with this context */
++SCARDCONTEXT CKYCardContext_GetContext(const CKYCardContext *context);
++/* Get a list of the installed readers */
++CKYStatus CKYCardContext_ListReaders(CKYCardContext *context,
++ CKYReaderNameList *readerNames);
++/* get a list of card connections for cards matching our target ATR */
++CKYStatus CKYCardContext_FindCardsByATR(CKYCardContext *context,
++ CKYCardConnectionList *cardList,
++ const CKYBuffer *targetATR);
++/* get a list of readers with attached cards that match our target ATR */
++CKYStatus CKYCardContext_FindReadersByATR(CKYCardContext *context,
++ CKYReaderNameList *readerNames,
++ const CKYBuffer *targetATR);
++/* return if any of the readers in our array has changed in status */
++CKYStatus CKYCardContext_WaitForStatusChange(CKYCardContext *context,
++ SCARD_READERSTATE *readers,
++ unsigned long readerCount,
++ unsigned long timeout);
++/* cancel any current operation (such as wait for status change) on this
++ * context */
++CKYStatus CKYCardContext_Cancel(CKYCardContext *context);
++/* get the last underlying Windows SCARD error */
++unsigned long CKYCardContext_GetLastError(const CKYCardContext *context);
++
++/*
++ * manage the actual connection to a card.
++ */
++/* create a connection. A connection is not associated with a reader
++ * until CKYCardConnection_Connect() is called.
++ */
++CKYCardConnection *CKYCardConnection_Create(const CKYCardContext *context);
++CKYStatus CKYCardConnection_Destroy(CKYCardConnection *connection);
++CKYStatus CKYCardConnection_BeginTransaction(CKYCardConnection *connection);
++CKYStatus CKYCardConnection_EndTransaction(CKYCardConnection *connection);
++CKYStatus CKYCardConnection_TransmitAPDU(CKYCardConnection *connection,
++ CKYAPDU *apdu,
++ CKYBuffer *response);
++CKYStatus CKYCardConnection_ExchangeAPDU(CKYCardConnection *connection,
++ CKYAPDU *apdu,
++ CKYBuffer *response);
++CKYStatus CKYCardConnection_Connect(CKYCardConnection *connection,
++ const char *readerName);
++CKYStatus CKYCardConnection_Disconnect(CKYCardConnection *connection);
++unsigned long CKYCardConnection_GetProtocol(const CKYCardConnection *conn);
++CKYBool CKYCardConnection_IsConnected(const CKYCardConnection *connection);
++CKYStatus CKYCardConnection_Reconnect(CKYCardConnection *connection);
++CKYStatus CKYCardConnection_GetStatus(CKYCardConnection *connection,
++ unsigned long *state, CKYBuffer *ATR);
++CKYStatus CKYCardConnection_GetAttribute(CKYCardConnection *connection,
++ unsigned long attrID, CKYBuffer *attrBuf);
++CKYStatus CKYCardConnection_Reset(CKYCardConnection *connection);
++const CKYCardContext *CKYCardConnection_GetContext(const CKYCardConnection *cxt);
++unsigned long CKYCardConnection_GetLastError(const CKYCardConnection *context);
++
++CKY_END_PROTOS
++
++#endif /* CKY_CARD_H */
+diff -up ./esc/src/lib/coolkey/cky_factory.c.fix1 ./esc/src/lib/coolkey/cky_factory.c
+--- ./esc/src/lib/coolkey/cky_factory.c.fix1 2018-04-26 11:44:38.439986181 -0700
++++ ./esc/src/lib/coolkey/cky_factory.c 2018-04-26 11:44:38.439986181 -0700
+@@ -0,0 +1,885 @@
++/* ***** BEGIN COPYRIGHT BLOCK *****
++ * Copyright (C) 2005 Red Hat, Inc.
++ * All rights reserved.
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation version
++ * 2.1 of the License.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
++ * ***** END COPYRIGHT BLOCK ***** */
++
++#include "string.h"
++#include "cky_base.h"
++#include "cky_factory.h"
++
++/*
++ * special commands can be issued at any time
++ */
++CKYStatus
++CKYAPDUFactory_SelectFile(CKYAPDU *apdu, CKYByte p1, CKYByte p2,
++ const CKYBuffer *AID)
++{
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_ISO7816);
++ CKYAPDU_SetINS(apdu, ISO_INS_SELECT_FILE);
++ CKYAPDU_SetP1(apdu, p1);
++ CKYAPDU_SetP2(apdu, p2);
++ return CKYAPDU_SetSendDataBuffer(apdu, AID);
++}
++
++CKYStatus
++CKYAPDUFactory_SelectCardManager(CKYAPDU *apdu)
++{
++ CKYByte c = 0;
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_ISO7816);
++ CKYAPDU_SetINS(apdu, ISO_INS_SELECT_FILE);
++ CKYAPDU_SetP1(apdu, 0x04);
++ CKYAPDU_SetP2(apdu, 0x00);
++ /* I can't find the documentation for this, but if you pass an empty
++ * AID to SelectFile on the Cyberflex Access 32k, it selects the
++ * CardManager applet. Good thing, because I couldn't find any other
++ * way to accomplish this without knowing the AID of the CardManager. */
++ return CKYAPDU_SetSendData(apdu,&c,0);
++}
++
++/*
++ * card manager commands must be issued with the card manager selected.
++ */
++CKYStatus
++CKYAPDUFactory_GetCPLCData(CKYAPDU *apdu)
++{
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_GLOBAL_PLATFORM);
++ CKYAPDU_SetINS(apdu, ISO_INS_GET_DATA);
++ CKYAPDU_SetP1(apdu, 0x9f);
++ CKYAPDU_SetP2(apdu, 0x7f);
++ return CKYAPDU_SetReceiveLen(apdu, CKY_SIZE_GET_CPLCDATA);
++}
++/*
++ * applet commands must be issued with the appplet selected.
++ */
++CKYStatus
++CKYAPDUFactory_ListKeys(CKYAPDU *apdu, CKYByte sequence)
++{
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_COOLKEY);
++ CKYAPDU_SetINS(apdu, CKY_INS_LIST_KEYS);
++ CKYAPDU_SetP1(apdu, sequence);
++ CKYAPDU_SetP2(apdu, 0x00);
++ return CKYAPDU_SetReceiveLen(apdu, CKY_SIZE_LIST_KEYS);
++}
++
++CKYStatus
++CKYAPDUFactory_ComputeCryptInit(CKYAPDU *apdu, CKYByte keyNumber, CKYByte mode,
++ CKYByte direction, CKYByte location)
++{
++ CKYByte data[5];
++
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_COOLKEY);
++ CKYAPDU_SetINS(apdu, CKY_INS_COMPUTE_CRYPT);
++ CKYAPDU_SetP1(apdu, keyNumber);
++ CKYAPDU_SetP2(apdu, CKY_CIPHER_INIT);
++ data[0] = mode;
++ data[1] = direction;
++ data[2] = location;
++ data[3] = 0; /* future provide for init data */
++ data[4] = 0;
++ return CKYAPDU_SetSendData(apdu, data, sizeof(data));
++}
++
++CKYStatus
++CKYAPDUFactory_ComputeCryptProcess(CKYAPDU *apdu, CKYByte keyNumber,
++ CKYByte location, const CKYBuffer *data)
++{
++ CKYStatus ret;
++ CKYBuffer buf;
++
++ CKYBuffer_InitEmpty(&buf);
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_COOLKEY);
++ CKYAPDU_SetINS(apdu, CKY_INS_COMPUTE_CRYPT);
++ CKYAPDU_SetP1(apdu, keyNumber);
++ CKYAPDU_SetP2(apdu, CKY_CIPHER_PROCESS);
++ if (data) {
++ ret = CKYBuffer_Reserve(&buf, 3);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYBuffer_AppendChar(&buf, location);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYBuffer_AppendShort(&buf, (unsigned short)CKYBuffer_Size(data));
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYAPDU_SetSendDataBuffer(apdu, &buf);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYAPDU_AppendSendDataBuffer(apdu, data);
++ } else {
++ ret = CKYAPDU_SetSendData(apdu, &location, 1);
++ }
++fail:
++ CKYBuffer_FreeData(&buf);
++ return ret;
++}
++
++
++CKYStatus
++CKYAPDUFactory_ComputeCryptFinal(CKYAPDU *apdu, CKYByte keyNumber,
++ CKYByte location, const CKYBuffer *data, const CKYBuffer *sig)
++{
++ CKYStatus ret;
++ CKYBuffer buf;
++
++ CKYBuffer_InitEmpty(&buf);
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_COOLKEY);
++ CKYAPDU_SetINS(apdu, CKY_INS_COMPUTE_CRYPT);
++ CKYAPDU_SetP1(apdu, keyNumber);
++ CKYAPDU_SetP2(apdu, CKY_CIPHER_FINAL);
++ if (data) {
++ ret = CKYBuffer_Reserve(&buf, 3);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYBuffer_AppendChar(&buf, location);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYBuffer_AppendShort(&buf, (unsigned short)CKYBuffer_Size(data));
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYAPDU_SetSendDataBuffer(apdu, &buf);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYAPDU_AppendSendDataBuffer(apdu, data);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ if (sig) {
++ CKYBuffer_Resize(&buf,2);
++ CKYBuffer_SetShort(&buf, 0, (unsigned short)CKYBuffer_Size(sig));
++ ret = CKYAPDU_AppendSendDataBuffer(apdu, &buf);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYAPDU_AppendSendDataBuffer(apdu, sig);
++ }
++ } else {
++ ret = CKYAPDU_SetSendData(apdu, &location, 1);
++ }
++fail:
++ CKYBuffer_FreeData(&buf);
++ return ret;
++}
++
++CKYStatus
++CKYAPDUFactory_ComputeECCKeyAgreementOneStep(CKYAPDU *apdu, CKYByte keyNumber,
++ CKYByte location,
++ const CKYBuffer *publicData, const CKYBuffer *secretKey)
++{
++ CKYStatus ret = CKYINVALIDARGS;
++ CKYSize len;
++ CKYBuffer buf;
++
++ if (!publicData)
++ return ret;
++
++ if (!(len = CKYBuffer_Size(publicData)))
++ return ret;
++
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_COOLKEY);
++ CKYAPDU_SetINS(apdu, CKY_INS_COMPUTE_ECC_KEY_AGREEMENT);
++ CKYAPDU_SetP1(apdu, keyNumber);
++ CKYAPDU_SetP2(apdu, CKY_CIPHER_ONE_STEP);
++
++ CKYBuffer_InitEmpty(&buf);
++
++ ret = CKYBuffer_Reserve(&buf, 3);
++
++ if (ret == CKYSUCCESS)
++ ret = CKYBuffer_AppendChar(&buf, location);
++ if (ret == CKYSUCCESS)
++ ret = CKYBuffer_AppendShort(&buf, (unsigned short)len);
++ if (ret == CKYSUCCESS)
++ ret = CKYAPDU_SetSendDataBuffer(apdu, &buf);
++ if (ret == CKYSUCCESS)
++ ret = CKYAPDU_AppendSendDataBuffer(apdu, publicData);
++ if (ret == CKYSUCCESS && secretKey && 0 < (len = CKYBuffer_Size(secretKey))) {
++ CKYBuffer_Resize(&buf,2);
++ CKYBuffer_SetShort(&buf, 0, (unsigned short)len);
++ ret = CKYAPDU_AppendSendDataBuffer(apdu, &buf);
++ if (ret == CKYSUCCESS)
++ ret = CKYAPDU_AppendSendDataBuffer(apdu, secretKey);
++ }
++ CKYBuffer_FreeData(&buf);
++ return ret;
++}
++
++CKYStatus
++CKYAPDUFactory_ComputeCryptOneStep(CKYAPDU *apdu, CKYByte keyNumber, CKYByte mode,
++ CKYByte direction, CKYByte location,
++ const CKYBuffer *idata, const CKYBuffer *sig)
++{
++ CKYStatus ret = CKYINVALIDARGS;
++ CKYSize len;
++ CKYBuffer buf;
++
++ if (!idata)
++ return ret;
++
++ if (!(len = CKYBuffer_Size(idata)) && location != CKY_DL_OBJECT)
++ return ret;
++
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_COOLKEY);
++ CKYAPDU_SetINS(apdu, CKY_INS_COMPUTE_CRYPT);
++ CKYAPDU_SetP1(apdu, keyNumber);
++ CKYAPDU_SetP2(apdu, CKY_CIPHER_ONE_STEP);
++
++ CKYBuffer_InitEmpty(&buf);
++
++ ret = CKYBuffer_Reserve(&buf, 5);
++ if (ret == CKYSUCCESS)
++ ret = CKYBuffer_AppendChar(&buf, mode);
++ if (ret == CKYSUCCESS)
++ ret = CKYBuffer_AppendChar(&buf, direction);
++ if (ret == CKYSUCCESS)
++ ret = CKYBuffer_AppendChar(&buf, location);
++ if (ret == CKYSUCCESS)
++ ret = CKYBuffer_AppendShort(&buf, (unsigned short)len);
++ if (ret == CKYSUCCESS)
++ ret = CKYAPDU_SetSendDataBuffer(apdu, &buf);
++ if (ret == CKYSUCCESS)
++ ret = CKYAPDU_AppendSendDataBuffer(apdu, idata);
++ if (ret == CKYSUCCESS && sig && 0 < (len = CKYBuffer_Size(sig))) {
++ CKYBuffer_Resize(&buf,2);
++ CKYBuffer_SetShort(&buf, 0, (unsigned short)len);
++ ret = CKYAPDU_AppendSendDataBuffer(apdu, &buf);
++ if (ret == CKYSUCCESS)
++ ret = CKYAPDU_AppendSendDataBuffer(apdu, sig);
++ }
++ CKYBuffer_FreeData(&buf);
++ return ret;
++}
++
++CKYStatus
++CKYAPDUFactory_CreatePIN(CKYAPDU *apdu, CKYByte pinNumber, CKYByte maxAttempts,
++ const char *pinValue)
++{
++ CKYSize len;
++
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_COOLKEY);
++ CKYAPDU_SetINS(apdu, CKY_INS_CREATE_PIN);
++ CKYAPDU_SetP1(apdu, pinNumber);
++ CKYAPDU_SetP2(apdu, maxAttempts);
++ len = strlen(pinValue);
++ return CKYAPDU_SetSendData(apdu, (unsigned char *)pinValue, len);
++}
++
++CKYStatus
++CKYAPDUFactory_VerifyPIN(CKYAPDU *apdu, CKYByte pinNumber, const char *pinValue)
++{
++ CKYSize len;
++
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_COOLKEY);
++ CKYAPDU_SetINS(apdu, CKY_INS_VERIFY_PIN);
++ CKYAPDU_SetP1(apdu, pinNumber);
++ CKYAPDU_SetP2(apdu, 0x00);
++ len = strlen(pinValue);
++ return CKYAPDU_SetSendData(apdu, (unsigned char *)pinValue, len);
++}
++
++CKYStatus
++CKYAPDUFactory_ChangePIN(CKYAPDU *apdu, CKYByte pinNumber, const char *oldPin,
++ const char *newPin)
++{
++ CKYSize oldLen, newLen;
++ CKYBuffer buf;
++ CKYStatus ret;
++
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_COOLKEY);
++ CKYAPDU_SetINS(apdu, CKY_INS_CHANGE_PIN);
++ CKYAPDU_SetP1(apdu, pinNumber);
++ CKYAPDU_SetP2(apdu, 0x00);
++
++ CKYBuffer_InitEmpty(&buf);
++ oldLen = strlen(oldPin);
++ newLen = strlen(newPin);
++ /* optimization, do a single malloc for the whole block */
++ ret = CKYBuffer_Reserve(&buf, oldLen+newLen+4);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYBuffer_AppendShort(&buf, (unsigned short)oldLen);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYBuffer_AppendData(&buf, (unsigned char *)oldPin, oldLen);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYBuffer_AppendShort(&buf, (unsigned short)newLen);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYBuffer_AppendData(&buf, (unsigned char *)newPin, newLen);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYAPDU_SetSendDataBuffer(apdu, &buf);
++fail:
++ CKYBuffer_FreeData(&buf);
++ return ret;
++}
++
++CKYStatus
++CKYAPDUFactory_ListPINs(CKYAPDU *apdu)
++{
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_COOLKEY);
++ CKYAPDU_SetINS(apdu, CKY_INS_LIST_PINS);
++ CKYAPDU_SetP1(apdu, 0x00);
++ CKYAPDU_SetP2(apdu, 0x00);
++ return CKYAPDU_SetReceiveLen(apdu, CKY_SIZE_LIST_PINS);
++}
++
++CKYStatus
++CKYAPDUFactory_Logout(CKYAPDU *apdu, CKYByte pinNumber)
++{
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_COOLKEY);
++ CKYAPDU_SetINS(apdu, CKY_INS_LOGOUT);
++ CKYAPDU_SetP1(apdu, pinNumber);
++ CKYAPDU_SetP2(apdu, 0x00);
++ return CKYSUCCESS;
++}
++
++CKYStatus
++CKYAPDUFactory_CreateObject(CKYAPDU *apdu, unsigned long objectID, CKYSize size,
++ unsigned short readACL, unsigned short writeACL, unsigned short deleteACL)
++{
++ CKYBuffer buf;
++ CKYStatus ret;
++
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_COOLKEY);
++ CKYAPDU_SetINS(apdu, CKY_INS_CREATE_OBJ);
++ CKYAPDU_SetP1(apdu, 0x00);
++ CKYAPDU_SetP2(apdu, 0x00);
++ CKYBuffer_InitEmpty(&buf);
++ /* optimization, do a single malloc for the whole block */
++ ret = CKYBuffer_Reserve(&buf,0x0e);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYBuffer_AppendLong(&buf,objectID);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYBuffer_AppendLong(&buf,size);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYBuffer_AppendShort(&buf,readACL);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYBuffer_AppendShort(&buf,writeACL);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYBuffer_AppendShort(&buf,deleteACL);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYAPDU_SetSendDataBuffer(apdu, &buf);
++fail:
++ CKYBuffer_FreeData(&buf);
++ return ret;
++
++}
++
++CKYStatus
++CKYAPDUFactory_DeleteObject(CKYAPDU *apdu, unsigned long objectID, CKYByte zero)
++{
++ CKYBuffer buf;
++ CKYStatus ret;
++
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_COOLKEY);
++ CKYAPDU_SetINS(apdu, CKY_INS_DELETE_OBJ);
++ CKYAPDU_SetP1(apdu, zero);
++ CKYAPDU_SetP2(apdu, 0x00);
++ CKYBuffer_InitEmpty(&buf);
++ ret = CKYBuffer_AppendLong(&buf,objectID);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYAPDU_SetSendDataBuffer(apdu, &buf);
++fail:
++ CKYBuffer_FreeData(&buf);
++ return ret;
++
++}
++
++CKYStatus
++CKYAPDUFactory_ComputeECCSignatureOneStep(CKYAPDU *apdu, CKYByte keyNumber,
++ CKYByte location,
++ const CKYBuffer *idata, const CKYBuffer *sig)
++{
++ CKYStatus ret = CKYINVALIDARGS;
++ CKYSize len;
++ CKYBuffer buf;
++
++ if (!idata)
++ return ret;
++
++ if (!(len = CKYBuffer_Size(idata)) && location != CKY_DL_OBJECT)
++ return ret;
++
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_COOLKEY);
++ CKYAPDU_SetINS(apdu, CKY_INS_COMPUTE_ECC_SIGNATURE);
++ CKYAPDU_SetP1(apdu, keyNumber);
++ CKYAPDU_SetP2(apdu, CKY_CIPHER_ONE_STEP);
++
++ CKYBuffer_InitEmpty(&buf);
++
++ ret = CKYBuffer_Reserve(&buf, 3);
++
++ if (ret == CKYSUCCESS)
++ ret = CKYBuffer_AppendChar(&buf, location);
++ if (ret == CKYSUCCESS)
++ ret = CKYBuffer_AppendShort(&buf, (unsigned short)len);
++ if (ret == CKYSUCCESS)
++ ret = CKYAPDU_SetSendDataBuffer(apdu, &buf);
++ if (ret == CKYSUCCESS)
++ ret = CKYAPDU_AppendSendDataBuffer(apdu, idata);
++ if (ret == CKYSUCCESS && sig && 0 < (len = CKYBuffer_Size(sig))) {
++ CKYBuffer_Resize(&buf,2);
++ CKYBuffer_SetShort(&buf, 0, (unsigned short)len);
++ ret = CKYAPDU_AppendSendDataBuffer(apdu, &buf);
++ if (ret == CKYSUCCESS)
++ ret = CKYAPDU_AppendSendDataBuffer(apdu, sig);
++ }
++ CKYBuffer_FreeData(&buf);
++ return ret;
++}
++
++CKYStatus
++CKYAPDUFactory_ReadObject(CKYAPDU *apdu, unsigned long objectID,
++ CKYOffset offset, CKYByte size)
++{
++ CKYBuffer buf;
++ CKYStatus ret;
++
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_COOLKEY);
++ CKYAPDU_SetINS(apdu, CKY_INS_READ_OBJ);
++ CKYAPDU_SetP1(apdu, 0x00);
++ CKYAPDU_SetP2(apdu, 0x00);
++ CKYBuffer_InitEmpty(&buf);
++ /* optimization, do a single malloc for the whole block */
++ ret = CKYBuffer_Reserve(&buf,0x09);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYBuffer_AppendLong(&buf,objectID);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYBuffer_AppendLong(&buf,offset);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYBuffer_AppendChar(&buf, size);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYAPDU_SetSendDataBuffer(apdu, &buf);
++fail:
++ CKYBuffer_FreeData(&buf);
++ return ret;
++
++}
++
++CKYStatus
++CKYAPDUFactory_WriteObject(CKYAPDU *apdu, unsigned long objectID,
++ CKYOffset offset,CKYSize size,CKYBuffer *data)
++{
++ CKYBuffer buf;
++ CKYStatus ret = CKYSUCCESS;
++ unsigned short dataSize = 0;
++
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_COOLKEY);
++ CKYAPDU_SetINS(apdu, CKY_INS_WRITE_OBJ);
++ CKYAPDU_SetP1(apdu, 0x00);
++ CKYAPDU_SetP2(apdu, 0x00);
++ CKYBuffer_InitEmpty(&buf);
++
++ dataSize = (unsigned short) CKYBuffer_Size(data);
++
++ if(!dataSize) {
++ ret = CKYINVALIDARGS;
++ goto fail;
++ }
++
++ ret = CKYBuffer_AppendLong(&buf,objectID);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYBuffer_AppendLong(&buf,offset);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYBuffer_AppendChar(&buf, size);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++
++ ret = CKYAPDU_SetSendDataBuffer(apdu,&buf);
++
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++
++ ret = CKYAPDU_AppendSendDataBuffer(apdu, data);
++
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++
++fail:
++ CKYBuffer_FreeData(&buf);
++ return ret;
++
++}
++
++CKYStatus
++CKYAPDUFactory_ListObjects(CKYAPDU *apdu, CKYByte sequence)
++{
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_COOLKEY);
++ CKYAPDU_SetINS(apdu, CKY_INS_LIST_OBJECTS);
++ CKYAPDU_SetP1(apdu, sequence);
++ CKYAPDU_SetP2(apdu, 0x00);
++ return CKYAPDU_SetReceiveLen(apdu, CKY_SIZE_LIST_OBJECTS);
++}
++
++CKYStatus
++CKYAPDUFactory_GetStatus(CKYAPDU *apdu)
++{
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_COOLKEY);
++ CKYAPDU_SetINS(apdu, CKY_INS_GET_STATUS);
++ CKYAPDU_SetP1(apdu, 0x00);
++ CKYAPDU_SetP2(apdu, 0x00);
++ return CKYAPDU_SetReceiveLen(apdu, CKY_SIZE_GET_STATUS);
++}
++
++CKYStatus
++CKYAPDUFactory_Noop(CKYAPDU *apdu)
++{
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_COOLKEY);
++ CKYAPDU_SetINS(apdu, CKY_INS_NOP);
++ CKYAPDU_SetP1(apdu, 0x00);
++ CKYAPDU_SetP2(apdu, 0x00);
++ return CKYSUCCESS;
++}
++
++CKYStatus
++CKYAPDUFactory_GetBuildID(CKYAPDU *apdu)
++{
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_COOLKEY);
++ CKYAPDU_SetINS(apdu, CKY_INS_GET_BUILDID);
++ CKYAPDU_SetP1(apdu, 0x00);
++ CKYAPDU_SetP2(apdu, 0x00);
++ return CKYAPDU_SetReceiveLen(apdu, CKY_SIZE_GET_BUILDID);
++}
++
++CKYStatus
++CKYAPDUFactory_GetLifeCycle(CKYAPDU *apdu)
++{
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_COOLKEY);
++ CKYAPDU_SetINS(apdu, CKY_INS_GET_LIFECYCLE);
++ CKYAPDU_SetP1(apdu, 0x00);
++ CKYAPDU_SetP2(apdu, 0x00);
++ return CKYAPDU_SetReceiveLen(apdu, CKY_SIZE_GET_LIFE_CYCLE);
++}
++
++CKYStatus
++CKYAPDUFactory_GetLifeCycleV2(CKYAPDU *apdu)
++{
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_COOLKEY);
++ CKYAPDU_SetINS(apdu, CKY_INS_GET_LIFECYCLE);
++ CKYAPDU_SetP1(apdu, 0x00);
++ CKYAPDU_SetP2(apdu, 0x00);
++ return CKYAPDU_SetReceiveLen(apdu, CKY_SIZE_GET_LIFE_CYCLE_V2);
++}
++
++CKYStatus
++CKYAPDUFactory_GetRandom(CKYAPDU *apdu, CKYByte len)
++{
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_COOLKEY);
++ CKYAPDU_SetINS(apdu, CKY_INS_GET_RANDOM);
++ CKYAPDU_SetP1(apdu, 0x00);
++ CKYAPDU_SetP2(apdu, 0x00);
++ return CKYAPDU_SetReceiveLen(apdu, len);
++}
++
++CKYStatus
++CKYAPDUFactory_SeedRandom(CKYAPDU *apdu, const CKYBuffer *data)
++{
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_COOLKEY);
++ CKYAPDU_SetINS(apdu, CKY_INS_SEED_RANDOM);
++ CKYAPDU_SetP1(apdu, 0x00);
++ CKYAPDU_SetP2(apdu, 0x00);
++ return CKYAPDU_SetSendDataBuffer(apdu, data);
++}
++
++CKYStatus
++CKYAPDUFactory_GetIssuerInfo(CKYAPDU *apdu)
++{
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_COOLKEY);
++ CKYAPDU_SetINS(apdu, CKY_INS_GET_ISSUER_INFO);
++ CKYAPDU_SetP1(apdu, 0x00);
++ CKYAPDU_SetP2(apdu, 0x00);
++ return CKYAPDU_SetReceiveLen(apdu, CKY_SIZE_GET_ISSUER_INFO);
++}
++
++CKYStatus
++CKYAPDUFactory_GetBuiltinACL(CKYAPDU *apdu)
++{
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_COOLKEY);
++ CKYAPDU_SetINS(apdu, CKY_INS_GET_BUILTIN_ACL);
++ CKYAPDU_SetP1(apdu, 0x00);
++ CKYAPDU_SetP2(apdu, 0x00);
++ return CKYAPDU_SetReceiveLen(apdu, CKY_SIZE_GET_BUILTIN_ACL);
++}
++
++CKYStatus
++CACAPDUFactory_SignDecrypt(CKYAPDU *apdu, CKYByte type, const CKYBuffer *data)
++{
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_ISO7816);
++ CKYAPDU_SetINS(apdu, CAC_INS_SIGN_DECRYPT);
++ CKYAPDU_SetP1(apdu, type);
++ CKYAPDU_SetP2(apdu, 0x00);
++ return CKYAPDU_SetSendDataBuffer(apdu, data);
++}
++
++CKYStatus
++CACAPDUFactory_GetCertificate(CKYAPDU *apdu, CKYSize size)
++{
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_ISO7816);
++ CKYAPDU_SetINS(apdu, CAC_INS_GET_CERTIFICATE);
++ CKYAPDU_SetP1(apdu, 0x00);
++ CKYAPDU_SetP2(apdu, 0x00);
++ return CKYAPDU_SetReceiveLen(apdu, size);
++}
++
++CKYStatus
++CACAPDUFactory_ReadFile(CKYAPDU *apdu, unsigned short offset,
++ CKYByte type, CKYByte count)
++{
++ CKYStatus ret;
++ CKYBuffer buf;
++
++ CKYBuffer_InitEmpty(&buf);
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_GLOBAL_PLATFORM);
++ CKYAPDU_SetINS(apdu, CAC_INS_READ_FILE);
++ CKYAPDU_SetP1(apdu, (offset >> 8) & 0xff);
++ CKYAPDU_SetP2(apdu, offset & 0xff);
++ ret = CKYBuffer_Reserve(&buf, 2);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYBuffer_AppendChar(&buf, type);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYBuffer_AppendChar(&buf, count);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYAPDU_SetSendDataBuffer(apdu, &buf);
++fail:
++ CKYBuffer_FreeData(&buf);
++ return ret;
++}
++
++CKYStatus
++CACAPDUFactory_GetProperties(CKYAPDU *apdu)
++{
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_ISO7816);
++ CKYAPDU_SetINS(apdu, CAC_INS_GET_PROPERTIES);
++ CKYAPDU_SetP1(apdu, 0x00);
++ CKYAPDU_SetP2(apdu, 0x00);
++ return CKYAPDU_SetReceiveLen(apdu, CAC_SIZE_GET_PROPERTIES);
++}
++
++CKYStatus
++PIVAPDUFactory_SignDecrypt(CKYAPDU *apdu, CKYByte chain, CKYByte alg,
++ CKYByte key, int len, const CKYBuffer *data)
++{
++ CKYStatus ret;
++ CKYAPDU_SetCLA(apdu, chain ? CKY_CLASS_ISO7816_CHAIN :
++ CKY_CLASS_ISO7816);
++ CKYAPDU_SetINS(apdu, PIV_INS_GEN_AUTHENTICATE);
++ CKYAPDU_SetP1(apdu, alg);
++ CKYAPDU_SetP2(apdu, key);
++ ret = CKYAPDU_SetSendDataBuffer(apdu, data);
++ if (ret == CKYSUCCESS && chain == 0 && len != 0) {
++ if (len >= 256) len = 0;
++ ret = CKYAPDU_AppendReceiveLen(apdu, len);
++ }
++ return ret;
++}
++
++CKYStatus
++PIVAPDUFactory_GetData(CKYAPDU *apdu, const CKYBuffer *object, CKYByte count)
++{
++ CKYStatus ret;
++ CKYBuffer buf;
++ CKYByte objectSize;
++
++ CKYBuffer_InitEmpty(&buf);
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_ISO7816);
++ CKYAPDU_SetINS(apdu, 0xcb);
++ CKYAPDU_SetP1(apdu, 0x3f);
++ CKYAPDU_SetP2(apdu, 0xff);
++
++ objectSize = CKYBuffer_Size(object);
++
++ ret = CKYBuffer_Reserve(&buf, 2+objectSize);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYBuffer_AppendChar(&buf, 0x5c);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYBuffer_AppendChar(&buf, objectSize);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYBuffer_AppendCopy(&buf, object);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYAPDU_SetSendDataBuffer(apdu, &buf);
++ if (ret != CKYSUCCESS) {
++ goto fail;
++ }
++ ret = CKYAPDU_AppendReceiveLen(apdu, count);
++fail:
++ CKYBuffer_FreeData(&buf);
++ return ret;
++}
++
++CKYStatus
++P15APDUFactory_VerifyPIN(CKYAPDU *apdu, CKYByte keyRef, const CKYBuffer *pin)
++{
++ CKYStatus ret;
++
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_ISO7816);
++ CKYAPDU_SetINS(apdu, CAC_INS_VERIFY_PIN);
++ CKYAPDU_SetP1(apdu, 0x00);
++ CKYAPDU_SetP2(apdu, keyRef);
++ /* no pin, send an empty buffer */
++ if (CKYBuffer_Size(pin) == 0) {
++ return CKYAPDU_SetReceiveLen(apdu, 0);
++ }
++
++ /* all CAC pins are 8 bytes exactly. If to long, truncate it */
++ ret = CKYAPDU_SetSendDataBuffer(apdu, pin);
++ return ret;
++
++}
++
++CKYStatus
++P15APDUFactory_ReadRecord(CKYAPDU *apdu, CKYByte record, CKYByte short_ef,
++ CKYByte flags, CKYByte count)
++{
++ CKYByte control;
++
++ control = (short_ef << 3) & 0xf8;
++ control |= flags & 0x07;
++
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_ISO7816);
++ CKYAPDU_SetINS(apdu, ISO_INS_READ_RECORD);
++ CKYAPDU_SetP1(apdu, record);
++ CKYAPDU_SetP2(apdu, control);
++ return CKYAPDU_SetReceiveLen(apdu, count);
++}
++
++CKYStatus
++P15APDUFactory_ReadBinary(CKYAPDU *apdu, unsigned short offset,
++ CKYByte short_ef, CKYByte flags, CKYByte count)
++{
++ CKYByte p1 = 0,p2 = 0;
++ unsigned short max_offset = 0;
++
++ if (flags & P15_USE_SHORT_EF) {
++ max_offset = 0xff;
++ p1 = P15_USE_SHORT_EF | (short_ef & 0x7);
++ p2 = offset & 0xff;
++ } else {
++ max_offset = 0x7fff;
++ p1 = (offset >> 8) & 0x7f;
++ p2 = offset & 0xff;
++ }
++ if (offset > max_offset) {
++ return CKYINVALIDARGS;
++ }
++
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_ISO7816);
++ CKYAPDU_SetINS(apdu, ISO_INS_READ_BINARY);
++ CKYAPDU_SetP1(apdu, p1);
++ CKYAPDU_SetP2(apdu, p2);
++ return CKYAPDU_SetReceiveLen(apdu, count);
++}
++
++CKYStatus
++P15APDUFactory_ManageSecurityEnvironment(CKYAPDU *apdu, CKYByte p1, CKYByte p2,
++ CKYByte keyRef)
++{
++ CKYByte param[3];
++
++ CKYAPDU_SetCLA(apdu, CKY_CLASS_ISO7816);
++ CKYAPDU_SetINS(apdu, ISO_INS_MANAGE_SECURITY_ENVIRONMENT);
++ CKYAPDU_SetP1(apdu, p1);
++ CKYAPDU_SetP2(apdu, p2);
++ param[0] = 0x83;
++ param[1] = 1;
++ param[2] = keyRef;
++ return CKYAPDU_SetSendData(apdu, param, sizeof param);
++}
++
++CKYStatus
++P15APDUFactory_PerformSecurityOperation(CKYAPDU *apdu, CKYByte dir,
++ int chain, CKYSize retLen, const CKYBuffer *data)
++{
++ CKYByte p1,p2;
++ CKYStatus ret;
++
++ CKYAPDU_SetCLA(apdu, chain ? CKY_CLASS_ISO7816_CHAIN :
++ CKY_CLASS_ISO7816);
++ CKYAPDU_SetINS(apdu, ISO_INS_PERFORM_SECURITY_OPERATION);
++ if (dir == CKY_DIR_DECRYPT) {
++ p1 = ISO_PSO_DECRYPT_P1;
++ p2 = ISO_PSO_DECRYPT_P2;
++ } else {
++ p1 = ISO_PSO_SIGN_P1;
++ p2 = ISO_PSO_SIGN_P2;
++ }
++ CKYAPDU_SetP1(apdu, p1);
++ CKYAPDU_SetP2(apdu, p2);
++ ret = CKYAPDU_SetSendDataBuffer(apdu, data);
++ if (ret == CKYSUCCESS && (chain == 0) && retLen != 0) {
++ ret = CKYAPDU_AppendReceiveLength(apdu, retLen);
++ }
++ return ret;
++}
++
++
+diff -up ./esc/src/lib/coolkey/cky_factory.h.fix1 ./esc/src/lib/coolkey/cky_factory.h
+--- ./esc/src/lib/coolkey/cky_factory.h.fix1 2018-04-26 11:44:38.442986163 -0700
++++ ./esc/src/lib/coolkey/cky_factory.h 2018-04-26 11:44:38.441986169 -0700
+@@ -0,0 +1,294 @@
++/* ***** BEGIN COPYRIGHT BLOCK *****
++ * Copyright (C) 2005 Red Hat, Inc.
++ * All rights reserved.
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation version
++ * 2.1 of the License.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
++ * ***** END COPYRIGHT BLOCK ***** */
++
++#ifndef CKY_FACTORY_H
++#define CKY_FACTORY_H 1
++
++#include "cky_base.h"
++
++/*
++ * Various Class bytes
++ */
++#define CKY_CLASS_ISO7816 0x00
++#define CKY_CLASS_ISO7816_CHAIN 0x10
++#define CKY_CLASS_GLOBAL_PLATFORM 0x80
++#define CKY_CLASS_SECURE 0x84
++#define CKY_CLASS_COOLKEY 0xb0
++
++/*
++ * Applet Instruction Bytes
++ */
++/* Card Manager */
++#define ISO_INS_SELECT_FILE 0xa4
++#define ISO_INS_GET_DATA 0xca
++#define ISO_INS_READ_BINARY 0xb0
++#define ISO_INS_READ_RECORD 0xb2
++#define ISO_INS_MANAGE_SECURITY_ENVIRONMENT 0x22
++#define ISO_INS_PERFORM_SECURITY_OPERATION 0x2a
++
++/* ISO Parameters: */
++#define ISO_LOGIN_LOCAL 0x80
++#define ISO_LOGIN_GLOBAL 0x00
++#define ISO_MSE_SET 0x01
++#define ISO_MSE_STORE 0xf2
++#define ISO_MSE_RESTORE 0xf3
++#define ISO_MSE_ERASE 0xf4
++#define ISO_MSE_QUAL_VERIFY 0x80
++#define ISO_MSE_QUAL_COMPUTE 0x40
++#define ISO_MSE_AUTH 0xa4
++#define ISO_MSE_SIGN 0xb6
++#define ISO_MSE_KEA 0xb8
++#define ISO_PSO_SIGN_P1 0x9e
++#define ISO_PSO_SIGN_P2 0x9a
++#define ISO_PSO_ENCRYPT_P1 0x86
++#define ISO_PSO_ENCRYPT_P2 0x80
++#define ISO_PSO_DECRYPT_P1 0x80
++#define ISO_PSO_DECRYPT_P2 0x86
++
++/* deprecated */
++#define CKY_INS_SETUP 0x2A
++#define CKY_INS_GEN_KEYPAIR 0x30
++#define CKY_INS_EXPORT_KEY 0x34
++#define CKY_INS_UNBLOCK_PIN 0x46
++#define CKY_INS_GET_CHALLENGE 0x62
++#define CKY_INS_CAC_EXT_AUTH 0x38
++#define CKY_INS_LOGOUT_ALL 0x60
++
++/* public */
++#define CKY_INS_VERIFY_PIN 0x42
++#define CKY_INS_LIST_OBJECTS 0x58
++#define CKY_INS_LIST_KEYS 0x3A
++#define CKY_INS_LIST_PINS 0x48
++#define CKY_INS_GET_STATUS 0x3C
++#define CKY_INS_GET_LIFECYCLE 0xF2
++#define CKY_INS_GET_ISSUER_INFO 0xF6
++#define CKY_INS_GET_BUILTIN_ACL 0xFA
++#define CKY_INS_GET_BUILDID 0x70
++#define CKY_INS_GET_RANDOM 0x72
++#define CKY_INS_SEED_RANDOM 0x73
++#define CKY_INS_NOP 0x71
++
++/* nonce validated only */
++#define CKY_INS_LOGOUT 0x61
++
++/* nonce validated & Secure Channel */
++#define CKY_INS_IMPORT_KEY 0x32
++#define CKY_INS_COMPUTE_CRYPT 0x36
++#define CKY_INS_COMPUTE_ECC_SIGNATURE 0x37
++#define CKY_INS_COMPUTE_ECC_KEY_AGREEMENT 0x38
++#define CKY_INS_CREATE_PIN 0x40
++#define CKY_INS_CHANGE_PIN 0x44
++#define CKY_INS_CREATE_OBJ 0x5A
++#define CKY_INS_DELETE_OBJ 0x52
++#define CKY_INS_READ_OBJ 0x56
++#define CKY_INS_WRITE_OBJ 0x54
++
++/* Secure channel only */
++#define CKY_INS_INIT_UPDATE 0x50
++#define CKY_INS_SEC_EXT_AUTH 0x82
++#define CKY_INS_SEC_SET_LIFECYCLE 0xF0
++#define CKY_INS_SEC_SET_PIN 0x04
++#define CKY_INS_SEC_READ_IOBUF 0x08
++#define CKY_INS_SEC_START_ENROLLMENT 0x0C
++
++
++/* CAC */
++#define CAC_INS_GET_CERTIFICATE 0x36
++#define CAC_INS_SIGN_DECRYPT 0x42
++#define CAC_INS_VERIFY_PIN 0x20
++#define CAC_INS_GET_PROPERTIES 0x56
++#define CAC_INS_READ_FILE 0x52
++
++#define CAC_SIZE_GET_PROPERTIES 48
++#define CAC_P1_STEP 0x80
++#define CAC_P1_FINAL 0x00
++
++/* PIV */
++#define PIV_INS_GEN_AUTHENTICATE 0x87
++
++/*
++ * Fixed return sized from various commands
++ */
++#define CKY_SIZE_GET_CPLCDATA 45
++#define CKY_SIZE_LIST_KEYS 11
++#define CKY_SIZE_LIST_PINS 2
++#define CKY_SIZE_LIST_OBJECTS 14
++#define CKY_SIZE_GET_STATUS 16
++#define CKY_SIZE_GET_LIFE_CYCLE 1
++#define CKY_SIZE_GET_LIFE_CYCLE_V2 4
++#define CKY_SIZE_GET_BUILDID 4
++#define CKY_SIZE_GET_ISSUER_INFO 0xe0
++#define CKY_SIZE_GET_BUILTIN_ACL 7
++
++/*
++ * Crypt functions
++ */
++/* functions */
++#define CKY_CIPHER_INIT 1
++#define CKY_CIPHER_PROCESS 2
++#define CKY_CIPHER_FINAL 3
++#define CKY_CIPHER_ONE_STEP 4 /* init and final in one APDU */
++
++/* modes */
++#define CKY_RSA_NO_PAD 0x00
++#define CKY_RSA_PAD_PKCS1 0x01
++#define CKY_DSA_SHA 0x10
++#define CKY_DES_CBC_NOPAD 0x20
++#define CKY_DES_ECB_NOPAD 0x21
++
++/* operations (Cipher Direction) */
++#define CKY_DIR_NONE 0x00
++#define CKY_DIR_SIGN 0x01
++#define CKY_DIR_VERIFY 0x02
++#define CKY_DIR_ENCRYPT 0x03
++#define CKY_DIR_DECRYPT 0x04
++
++/* Data Location */
++#define CKY_DL_APDU 0x01
++#define CKY_DL_OBJECT 0x02
++
++/* Key Types */
++#define CKY_KEY_RSA_PUBLIC 0x01
++#define CKY_KEY_RSA_PRIVATE 0x02
++#define CKY_KEY_RSA_PRIVATE_CRT 0x03
++#define CKY_KEY_DSA_PUBLIC 0x04
++#define CKY_KEY_DSA_PRIVATE 0x05
++#define CKY_KEY_DES 0x06
++#define CKY_KEY_3DES 0x07
++#define CKY_KEY_3DES3 0x08
++
++/* List Operators */
++#define CKY_LIST_RESET 0x00
++#define CKY_LIST_NEXT 0x01
++
++/* Max Size for a read block */
++#define CKY_MAX_READ_CHUNK_SIZE 255
++#define CKY_MAX_WRITE_CHUNK_SIZE 240
++
++/* Life Cycle State */
++#define CKY_APPLICATION_LOGICALLY_DELETED 0x00
++#define CKY_APPLICATION_INSTALLED 0x03
++#define CKY_APPLICATION_SELECTABLE 0x07
++#define CKY_APPLICATION_PERSONALIZED 0x0f
++#define CKY_APPLICATION_BLOCKED 0x7f
++#define CKY_APPLICATION_LOCKED 0xff
++#define CKY_CARDM_MANAGER_OP_READER 0x01
++#define CKY_CARDM_MANAGER_INITIALIZED 0x03
++#define CKY_CARDM_MANAGER_SECURED 0x0f
++#define CKY_CARDM_MANAGER_LOCKED 0x7f
++#define CKY_CARDM_MANAGER_TERMINATED 0xff
++
++/* Read Record Flags */
++#define P15_READ_P1 0x4
++#define P15_READ_P1_TO_LAST 0x5
++#define P15_READ_LAST_TO_P1 0x6
++#define P15_READ_FIRST 0x0
++#define P15_READ_LAST 0x1
++#define P15_READ_NEXT 0x2
++#define P15_READ_PREV 0x3
++
++/* Read Binary Flags */
++#define P15_USE_SHORT_EF 0x80
++
++/*
++ * The following factories 'Fill in' APDUs for each of the
++ * functions described below. Nonces are not automatically added.
++ * APDU's are for COOLKEY version 1.0 protocol. Callers should pass
++ * in Already inited apdu's . Callers are responsible for freeing.
++ * the APDU data, even in event of failure.
++ */
++CKY_BEGIN_PROTOS
++
++/* function based factorys */
++CKYStatus CKYAPDUFactory_SelectFile(CKYAPDU *apdu, CKYByte p1, CKYByte p2,
++ const CKYBuffer *AID);
++CKYStatus CKYAPDUFactory_SelectCardManager(CKYAPDU *apdu);
++CKYStatus CKYAPDUFactory_GetCPLCData(CKYAPDU *apdu);
++CKYStatus CKYAPDUFactory_ListKeys(CKYAPDU *apdu, CKYByte sequence);
++CKYStatus CKYAPDUFactory_ComputeCryptInit(CKYAPDU *apdu, CKYByte keyNumber,
++ CKYByte mode, CKYByte direction, CKYByte location);
++CKYStatus CKYAPDUFactory_ComputeCryptProcess(CKYAPDU *apdu, CKYByte keyNumber,
++ CKYByte location, const CKYBuffer *data);
++CKYStatus CKYAPDUFactory_ComputeCryptFinal(CKYAPDU *apdu, CKYByte keyNumber,
++ CKYByte location, const CKYBuffer *data, const CKYBuffer *sig);
++CKYStatus CKYAPDUFactory_ComputeCryptOneStep(CKYAPDU *apdu, CKYByte keyNumber,
++ CKYByte mode, CKYByte direction, CKYByte location,
++ const CKYBuffer *data, const CKYBuffer *sig);
++CKYStatus CKYAPDUFactory_ComputeECCSignatureOneStep(CKYAPDU *apdu, CKYByte keyNumber,
++ CKYByte location,
++ const CKYBuffer *data, const CKYBuffer *sig);
++CKYStatus CKYAPDUFactory_ComputeECCKeyAgreementOneStep(CKYAPDU *apdu, CKYByte keyNumber,
++ CKYByte location,
++ const CKYBuffer *publicData, const CKYBuffer *secretKey);
++CKYStatus CKYAPDUFactory_CreatePIN(CKYAPDU *apdu, CKYByte pinNumber,
++ CKYByte maxAttempts, const char *pinValue);
++CKYStatus CKYAPDUFactory_VerifyPIN(CKYAPDU *apdu, CKYByte pinNumber,
++ const char *pinValue);
++CKYStatus CKYAPDUFactory_ChangePIN(CKYAPDU *apdu, CKYByte pinNUmber,
++ const char *oldPin, const char *newPin);
++CKYStatus CKYAPDUFactory_ListPINs(CKYAPDU *apdu);
++CKYStatus CKYAPDUFactory_Logout(CKYAPDU *apdu, CKYByte pinNumber);
++CKYStatus CKYAPDUFactory_WriteObject(CKYAPDU *apdu, unsigned long objectID,
++ CKYOffset offset,CKYSize size,CKYBuffer *data);
++/* Future add WriteObject */
++CKYStatus CKYAPDUFactory_CreateObject(CKYAPDU *apdu, unsigned long objectID,
++ CKYSize size, unsigned short readACL, unsigned short writeACL,
++ unsigned short deleteACL);
++CKYStatus CKYAPDUFactory_DeleteObject(CKYAPDU *apdu, unsigned long objectID,
++ CKYByte zero);
++CKYStatus CKYAPDUFactory_ReadObject(CKYAPDU *apdu, unsigned long objectID,
++ CKYOffset offset, CKYByte size);
++CKYStatus CKYAPDUFactory_ListObjects(CKYAPDU *apdu, CKYByte sequence);
++CKYStatus CKYAPDUFactory_GetStatus(CKYAPDU *apdu);
++CKYStatus CKYAPDUFactory_Noop(CKYAPDU *apdu);
++CKYStatus CKYAPDUFactory_GetBuildID(CKYAPDU *apdu);
++CKYStatus CKYAPDUFactory_GetLifeCycle(CKYAPDU *apdu);
++CKYStatus CKYAPDUFactory_GetLifeCycleV2(CKYAPDU *apdu);
++CKYStatus CKYAPDUFactory_GetRandom(CKYAPDU *apdu, CKYByte len);
++CKYStatus CKYAPDUFactory_SeedRandom(CKYAPDU *apdu, const CKYBuffer *data);
++CKYStatus CKYAPDUFactory_GetIssuerInfo(CKYAPDU *apdu);
++CKYStatus CKYAPDUFactory_GetBuiltinACL(CKYAPDU *apdu);
++
++CKYStatus CACAPDUFactory_SignDecrypt(CKYAPDU *apdu, CKYByte type,
++ const CKYBuffer *data);
++CKYStatus CACAPDUFactory_GetCertificate(CKYAPDU *apdu, CKYSize size);
++CKYStatus CACAPDUFactory_ReadFile(CKYAPDU *apdu, unsigned short offset,
++ CKYByte type, CKYByte count);
++CKYStatus CACAPDUFactory_GetProperties(CKYAPDU *apdu);
++
++CKYStatus PIVAPDUFactory_GetData(CKYAPDU *apdu, const CKYBuffer *object,
++ CKYByte count);
++CKYStatus PIVAPDUFactory_SignDecrypt(CKYAPDU *apdu, CKYByte chain, CKYByte alg,
++ CKYByte key, int len, const CKYBuffer *data);
++
++CKYStatus P15APDUFactory_VerifyPIN(CKYAPDU *apdu, CKYByte keyRef,
++ const CKYBuffer *pin);
++CKYStatus P15APDUFactory_ReadRecord(CKYAPDU *apdu, CKYByte record,
++ CKYByte short_ef, CKYByte flags, CKYByte count);
++CKYStatus P15APDUFactory_ReadBinary(CKYAPDU *apdu, unsigned short offset,
++ CKYByte short_ef, CKYByte flags, CKYByte count);
++CKYStatus P15APDUFactory_ManageSecurityEnvironment(CKYAPDU *apdu,
++ CKYByte p1, CKYByte p2, CKYByte key);
++CKYStatus P15APDUFactory_PerformSecurityOperation(CKYAPDU *apdu, CKYByte dir,
++ int chain, CKYSize retLen, const CKYBuffer *data);
++
++
++CKY_END_PROTOS
++
++#endif /* CKY_FACTORY_H */
+diff -up ./esc/src/lib/coolkey/cky_list.h.fix1 ./esc/src/lib/coolkey/cky_list.h
+--- ./esc/src/lib/coolkey/cky_list.h.fix1 2018-04-26 11:44:38.442986163 -0700
++++ ./esc/src/lib/coolkey/cky_list.h 2018-04-26 11:44:38.442986163 -0700
+@@ -0,0 +1,75 @@
++/* ***** BEGIN COPYRIGHT BLOCK *****
++ * Copyright (C) 2005 Red Hat, Inc.
++ * All rights reserved.
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation version
++ * 2.1 of the License.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
++ * ***** END COPYRIGHT BLOCK ***** */
++
++#ifndef CKY_LIST_H
++#define CKY_LIST_H 1
++/*
++ * Macro to declare methods and types for CoolKey Lists.
++ */
++#define CKYLIST_DECLARE(name, type) \
++typedef void *name##List; \
++typedef void *name##Iterator; \
++ \
++CKY_BEGIN_PROTOS \
++/* get the number of elements in the name##List */ \
++unsigned long name##List_GetCount(name##List list); \
++ \
++/* returns the 'index'th element of the list. \
++ * This provides one way of walking the list... \
++ * \
++ * // acquire name##List list \
++ * int count; \
++ * int i; \
++ * \
++ * count = name##List_GetCount(list); \
++ * for (i=0; i < count; i++) { \
++ * const type value = name##List_GetValue(list, i); \
++ * \
++ * // Process value \
++ * } \
++ */ \
++const type name##List_GetValue(name##List list, unsigned long index); \
++ \
++/* * Destroy a list */ \
++void name##List_Destroy(name##List list); \
++ \
++/* \
++ * The following iterators allows someone to easily walk the list using \
++ * the following sample code. These functions hide the underlying \
++ * implementation. \
++ * \
++ * // acquire name##List list \
++ * name##Iterator iter; \
++ * \
++ * for (iter = name##List_GetIterator(list); !name##Iterator_End(inter); \
++ * iter = name##Interator_Next(iter) ) { \
++ * const type value = name##Interator_GetValue(iter); \
++ * \
++ * // Process value \
++ * } \
++ * \
++ */ \
++name##Iterator name##List_GetIterator(name##List list); \
++CKYBool name##Iterator_End(name##Iterator iter); \
++name##Iterator name##Iterator_Next(name##Iterator iter); \
++const type name##Iterator_GetValue(name##Iterator iter); \
++CKY_END_PROTOS \
++/* end of Declarations */
++
++#endif /* CKY_LIST_H */
+diff -up ./esc/src/lib/coolkey/cky_list.i.fix1 ./esc/src/lib/coolkey/cky_list.i
+--- ./esc/src/lib/coolkey/cky_list.i.fix1 2018-04-26 11:44:38.442986163 -0700
++++ ./esc/src/lib/coolkey/cky_list.i 2018-04-26 11:44:38.442986163 -0700
+@@ -0,0 +1,145 @@
++/* ***** BEGIN COPYRIGHT BLOCK *****
++ * Copyright (C) 2005 Red Hat, Inc.
++ * All rights reserved.
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation version
++ * 2.1 of the License.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
++ * ***** END COPYRIGHT BLOCK ***** */
++
++#ifndef CKY_LIST_I
++#define CKY_LIST_I 1
++
++#define CKYLIST_IMPLEMENT(name,type) \
++ \
++/* \
++ * name##List is implemented as a pointer to a NULL terminated array of \
++ * type##s. A NULL name##List is valid and means a list with '0' elements \
++ * The actual type is a void * and the follow functions are designed to \
++ * hide the underlying structure of name##List. \
++ */ \
++ \
++/* get the number of elements in the reader List */ \
++unsigned long \
++name##List_GetCount(name##List list) \
++{ \
++ type *current; \
++ int count; \
++ \
++ if (list == NULL) { \
++ return 0; \
++ } \
++ \
++ for (count=0, current = (type *)list; *current; current++, count++) { \
++ /* EMPTY */ ; \
++ } \
++ \
++ return count; \
++} \
++ \
++ \
++/* returns the 'index'th element of the list. \
++ * index is not checked for overruns in this implementation. \
++ * \
++ * This provides one way of walking the list... \
++ * \
++ * // acquire name##List list \
++ * int count; \
++ * int i; \
++ * \
++ * count = name##List_GetCount(list); \
++ * for (i=0; i < count; i++) { \
++ * const type value = name##List_GetValue(list, i); \
++ * \
++ * // Process value \
++ * } \
++ */ \
++const type \
++name##List_GetValue(name##List list, unsigned long index) \
++{ \
++ type *array = (type *)list; \
++ \
++ /* should probably be an assert */ \
++ if (list == NULL) { \
++ return NULL; \
++ } \
++ return array[index]; \
++} \
++ \
++/* Destroy a list */ \
++void \
++name##List_Destroy(name##List list) \
++{ \
++ type *cur; \
++ if (list == NULL) { \
++ return ; \
++ } \
++ \
++ for (cur =(type *)list; *cur; cur++) { \
++ name##_Destroy(*cur); \
++ } \
++ free(list); \
++} \
++ \
++/* \
++ * The following iterators allows someone to easily walk the list using \
++ * the following sample code. These functions hide the underlying \
++ * implementation. \
++ * \
++ * // acquire name##List list \
++ * name##Iterator iter; \
++ * \
++ * for (iter = name##List_GetIterator(list); !name##Iterator_End(inter); \
++ * iter = name##Iterator_Next(iter) ) { \
++ * const type value = name##Iterator_GetValue(iter); \
++ * // process value \
++ * } \
++ * \
++ */ \
++name##Iterator \
++name##List_GetIterator(name##List list) \
++{ \
++ return (name##Iterator) list; \
++} \
++ \
++CKYBool \
++name##Iterator_End(name##Iterator iter) \
++{ \
++ if (iter == NULL) { \
++ return 1; \
++ } \
++ return *(type *)iter == NULL; \
++} \
++ \
++name##Iterator \
++name##Iterator_Next(name##Iterator iter) \
++{ \
++ if (iter == NULL) { \
++ return NULL; \
++ } \
++ return (name##Iterator) (((type *)iter)+1); \
++} \
++ \
++const type \
++name##Iterator_GetValue(name##Iterator iter) \
++{ \
++ /* assert(iter != NULL); */ \
++ return *(type *)iter; \
++} \
++ \
++/* \
++ * add functions to create lists, & add elements to lists \
++ */ \
++
++
++#endif /* CKY_LIST_I */
+diff -up ./esc/src/lib/coolkey/CoolKey.cpp.fix1 ./esc/src/lib/coolkey/CoolKey.cpp
+--- ./esc/src/lib/coolkey/CoolKey.cpp.fix1 2017-07-24 16:46:36.000000000 -0700
++++ ./esc/src/lib/coolkey/CoolKey.cpp 2018-04-26 11:44:38.443986158 -0700
+@@ -22,8 +22,6 @@
+
+ #include "prthread.h"
+ #include "pk11func.h"
+-#include "cky_base.h"
+-#include "cky_applet.h"
+
+ #include "NSSManager.h"
+ #include "CoolKeyHandler.h"
+@@ -475,6 +473,268 @@ HRESULT CoolKeyNotify(const CoolKey *aKe
+ return S_OK;
+ }
+
++HRESULT CoolKeyGetCUIDDirectly(char *aBuff, int aBuffLen, const char *readerName) {
++
++ CKYBuffer cuid;
++ CKYBuffer_InitEmpty(&cuid);
++ CKYCardConnection *conn = NULL;
++ CKYStatus status;
++ HRESULT result = E_FAIL;
++ CKYCardContext *cardCtxt = NULL;
++ CKYISOStatus apduRC = 0;
++
++ const CKYByte * cuidBytes = NULL;
++
++
++ if ( !aBuff || aBuffLen < 25 || !readerName)
++ {
++ goto done;
++ }
++
++ cardCtxt = CKYCardContext_Create(SCARD_SCOPE_USER);
++ assert(cardCtxt);
++ if (!cardCtxt) {
++ goto done;
++ }
++
++ conn = CKYCardConnection_Create(cardCtxt);
++ assert(conn);
++ if (!conn) {
++ goto done;
++ }
++
++ status = CKYCardConnection_Connect(conn, readerName);
++ if (status != CKYSUCCESS) {
++ goto done;
++ }
++
++ CKYCardConnection_BeginTransaction(conn);
++
++ status = CKYApplet_GetCUID(conn, &cuid, &apduRC);
++ if (status != CKYSUCCESS) {
++ goto done;
++ }
++
++ cuidBytes = CKYBuffer_Data(&cuid);
++
++ result = CoolKeyBinToHex(cuidBytes,
++ CKYBuffer_Size(&cuid),
++ (unsigned char *) aBuff,
++ aBuffLen,
++ 1);
++
++ result = S_OK;
++done:
++
++ if (conn) {
++ CKYCardConnection_EndTransaction(conn);
++ CKYCardConnection_Disconnect(conn);
++ CKYCardConnection_Destroy(conn);
++ }
++ if (cardCtxt) {
++ CKYCardContext_Destroy(cardCtxt);
++ }
++
++ CKYBuffer_FreeData(&cuid);
++
++ return result;
++
++
++}
++
++HRESULT CoolKeyGetATRDirectly(char *aBuff, int aBuffLen,const char *readerName) {
++
++ CKYBuffer ATR;
++ CKYBuffer_InitEmpty(&ATR);
++ CKYCardConnection *conn = NULL;
++ CKYStatus status;
++ HRESULT result = E_FAIL;
++ CKYCardContext *cardCtxt = NULL;
++
++ const CKYByte * atrBytes = NULL;
++
++ if ( !aBuff || aBuffLen < 25 || !readerName)
++ {
++ goto done;
++ }
++
++ cardCtxt = CKYCardContext_Create(SCARD_SCOPE_USER);
++ assert(cardCtxt);
++ if (!cardCtxt) {
++ goto done;
++ }
++
++ conn = CKYCardConnection_Create(cardCtxt);
++ assert(conn);
++ if (!conn) {
++ goto done;
++ }
++
++ status = CKYCardConnection_Connect(conn, readerName);
++ if (status != CKYSUCCESS) {
++ goto done;
++ }
++
++ CKYCardConnection_BeginTransaction(conn);
++ unsigned long state;
++
++ status = CKYCardConnection_GetStatus(conn, &state, &ATR);
++ if (status != CKYSUCCESS) {
++ result = E_FAIL;
++ goto done;
++ }
++
++ atrBytes = CKYBuffer_Data(&ATR);
++
++ result = CoolKeyBinToHex(atrBytes,
++ CKYBuffer_Size(&ATR),
++ (unsigned char *) aBuff,
++ aBuffLen,
++ 1);
++
++
++ if(result != CKYSUCCESS) {
++ goto done;
++ }
++
++ result = S_OK;
++ done:
++
++ if (conn) {
++ CKYCardConnection_EndTransaction(conn);
++ CKYCardConnection_Disconnect(conn);
++ CKYCardConnection_Destroy(conn);
++ }
++ if (cardCtxt) {
++ CKYCardContext_Destroy(cardCtxt);
++ }
++
++ CKYBuffer_FreeData(&ATR);
++
++ return result;
++}
++
++HRESULT CoolKeyGetLifeCycleDirectly(CKYByte *personalized,const char *readerName) {
++ CKYCardConnection *conn = NULL;
++ CKYStatus status;
++ HRESULT result = E_FAIL;
++
++ CKYISOStatus apduRC = 0;
++
++ CKYCardContext *cardCtxt = NULL;
++
++ if ( personalized == NULL || !readerName)
++ {
++ goto done;
++ }
++
++ cardCtxt = CKYCardContext_Create(SCARD_SCOPE_USER);
++ assert(cardCtxt);
++ if (!cardCtxt) {
++ goto done;
++ }
++
++ conn = CKYCardConnection_Create(cardCtxt);
++ assert(conn);
++ if (!conn) {
++ goto done;
++ }
++
++ status = CKYCardConnection_Connect(conn, readerName);
++ if (status != CKYSUCCESS) {
++ goto done;
++ }
++
++ CKYCardConnection_BeginTransaction(conn);
++ unsigned long state;
++ status = CKYApplet_SelectCoolKeyManager(conn, &apduRC);
++ if (status != CKYSUCCESS) {
++ *personalized = 0xff;
++ goto done;
++ }
++
++ //We know we have selected the applet, even if the subsequent
++ // LifeCycle call fails.
++ *personalized = 0x7;
++ status = CKYApplet_GetLifeCycle(conn, personalized,&apduRC);
++
++ if(result != CKYSUCCESS) {
++ goto done;
++ }
++
++ result = S_OK;
++ done:
++
++ if (conn) {
++ CKYCardConnection_EndTransaction(conn);
++ CKYCardConnection_Disconnect(conn);
++ CKYCardConnection_Destroy(conn);
++ }
++ if (cardCtxt) {
++ CKYCardContext_Destroy(cardCtxt);
++ }
++
++ return result;
++}
++
++HRESULT CoolKeyGetCPLCDataDirectly(CKYAppletRespGetCPLCData *cplc,const char *readerName) {
++
++ CKYCardConnection *conn = NULL;
++ CKYStatus status;
++ HRESULT result = E_FAIL;
++ CKYISOStatus apduRC = 0;
++ CKYCardContext *cardCtxt = NULL;
++
++ if ( cplc == NULL || !readerName)
++ {
++ goto done;
++ }
++
++ cardCtxt = CKYCardContext_Create(SCARD_SCOPE_USER);
++ assert(cardCtxt);
++ if (!cardCtxt) {
++ goto done;
++ }
++
++ conn = CKYCardConnection_Create(cardCtxt);
++ assert(conn);
++ if (!conn) {
++ goto done;
++ }
++
++ status = CKYCardConnection_Connect(conn, readerName);
++ if (status != CKYSUCCESS) {
++ goto done;
++ }
++
++ CKYCardConnection_BeginTransaction(conn);
++ unsigned long state;
++
++ status = CKYApplet_SelectCardManager(conn, &apduRC);
++ if (status != CKYSUCCESS) {
++ goto done;
++ }
++
++ status = CKYApplet_GetCPLCData(conn, cplc,
++ &apduRC);
++ if (status != CKYSUCCESS) {
++ goto done;
++ }
++
++ result = S_OK;
++ done:
++
++ if (conn) {
++ CKYCardConnection_EndTransaction(conn);
++ CKYCardConnection_Disconnect(conn);
++ CKYCardConnection_Destroy(conn);
++ }
++ if (cardCtxt) {
++ CKYCardContext_Destroy(cardCtxt);
++ }
++
++ return result;
++}
+
+
+ static std::list<ActiveKeyNode *> g_ActiveKeyList;
+diff -up ./esc/src/lib/coolkey/CoolKeyHandler.cpp.fix1 ./esc/src/lib/coolkey/CoolKeyHandler.cpp
+--- ./esc/src/lib/coolkey/CoolKeyHandler.cpp.fix1 2017-07-24 16:46:36.000000000 -0700
++++ ./esc/src/lib/coolkey/CoolKeyHandler.cpp 2018-04-26 11:44:38.445986146 -0700
+@@ -44,6 +44,8 @@
+ #include "CoolKeyHandler.h"
+ #include "SlotUtils.h"
+
++static const char *cac_manu_id= "Common Access Card";
++static const char *piv_manu_id= "piv II ";
+
+ //static char *test_extended_login = "s=325&msg_type=13&invalid_login=0&blocked=0&error=&required_parameter0=id%3DUSER%5FID%26name%3DUser+ID%26desc%3DUser+ID%26type%3Dstring%26option%3Doption1%2Coption2%2Coption3&required_parameter1=id%3DUSER%5FPWD%26name%3DUser+Password%26desc%3DUser+Password%26type%3Dpassword%26option%3D&required_parameter2=id%3DUSER%5FPIN%26name%3DPIN%26desc%3DOne+time+PIN+received+via+mail%26type%3Dpassword%26option%3D";
+
+@@ -1141,12 +1143,10 @@ HRESULT CoolKeyHandler::HttpBeginOpReque
+ const char *atr = GetATRForKeyID(&mKey);
+ if (!atr )
+ {
+- HttpDisconnect();
+- RemoveKeyFromActiveKeyList(&mKey);
+- return E_FAIL;
++ sprintf(buffer,"tokenATR=%s","unknown-atr");
++ } else {
++ sprintf(buffer,"tokenATR=%s",atr);
+ }
+-
+- sprintf(buffer,"tokenATR=%s",atr);
+
+ ext_buffer = buffer;
+
+@@ -1190,6 +1190,41 @@ HRESULT CoolKeyHandler::HttpBeginOpReque
+ }
+ }
+
++CKYBuffer *CoolKeyHandler::processTokenPDU(CoolKeyHandler *context, CKYAPDU *apdu)
++{
++ char tBuff[56];
++ CKYStatus status = CKYSUCCESS;
++ PR_LOG( coolKeyLogHN, PR_LOG_DEBUG, ("%s CoolKeyHandler::processTokenPDU:\n",GetTStamp(tBuff,56)));
++ if(!apdu || !context)
++ {
++ CoolKeyLogMsg( PR_LOG_ERROR, "%s apdu message. Bad input data. \n",GetTStamp(tBuff,56));
++ return NULL;
++ }
++
++ CKYBuffer *response = NULL;
++ status = CKYBuffer_InitEmpty(response);
++
++ if(status != CKYSUCCESS) {
++ CoolKeyLogMsg( PR_LOG_ERROR, "%s apdu message. Out of memory. \n",GetTStamp(tBuff,56));
++ return NULL;
++ }
++
++ status = CKYCardConnection_ExchangeAPDU(context->GetCardConnection(),
++ apdu, response);
++
++ if (status != CKYSUCCESS) {
++ CoolKeyLogMsg( PR_LOG_ERROR,
++ "%s Processing apdu message. Can't write apdu to card! status %d response[0] %x response[1] %x error %d \n"
++ ,GetTStamp(tBuff,56) ,status,CKYBuffer_GetChar(response,0),CKYBuffer_GetChar(response,1),
++ CKYCardConnection_GetLastError(context->GetCardConnection()));
++
++ return response;
++ }
++
++ return response;
++
++}
++
+ void CoolKeyHandler::HttpProcessTokenPDU(CoolKeyHandler *context,eCKMessage_TOKEN_PDU_REQUEST *req)
+ {
+ char tBuff[56];
+@@ -1606,7 +1641,12 @@ void CoolKeyHandler::HttpProcessEndOp(Co
+ void NotifyEndResult(CoolKeyHandler* context, int operation, int result, int description)
+ {
+ char tBuff[56];
+- RefreshInfoFlagsForKeyID(context->GetAutoCoolKey());
++
++ CoolKeyInfo *info = GetCoolKeyInfoByKeyID(context->GetAutoCoolKey());
++ CKHGetCoolKeyInfo(info->mSlot,info);
++
++
++ //RefreshInfoFlagsForKeyID(context->GetAutoCoolKey());
+
+ PR_LOG( coolKeyLogHN, PR_LOG_DEBUG, ("%s CoolKeyHandler::NotifyEndResult context %p op %d result %d description %d:\n",GetTStamp(tBuff,56),context,operation,result,description));
+
+@@ -2024,14 +2064,14 @@ getCUIDFromTokenInfo(CK_TOKEN_INFO *toke
+ isxdigit(tokenInfo->manufacturerID[3]) ) {
+ // one format has top 2 bytes of CUID (4 hex digits) in manufacturer,
+ // and the rest in the module
+- cp = copySerialNumber(cp, (const char *)tokenInfo->manufacturerID, 4);
+- cp = copySerialNumber(cp,(const char *)tokenInfo->model,
+- sizeof(tokenInfo->model));
++ cp = copySerialNumber(cp, (const char *)tokenInfo->manufacturerID, 2);
++ cp = copySerialNumber(cp,(const char *)tokenInfo->serialNumber,
++ sizeof(tokenInfo->serialNumber));
+ } else {
+ // otherwise it's just the concatenation of the model and serial
+ // fields
+ cp = copySerialNumber(cp, (const char *)tokenInfo->model,
+- sizeof(tokenInfo->model));
++ 2);
+ cp = copySerialNumber(cp, (const char *)tokenInfo->serialNumber,
+ sizeof(tokenInfo->serialNumber));
+ }
+@@ -2055,126 +2095,155 @@ CKHGetInfoFlags(PK11SlotInfo *aSlot)
+ }
+
+ CoolKeyInfo *
+-CKHGetCoolKeyInfo(PK11SlotInfo *aSlot)
++CKHGetCoolKeyInfo(PK11SlotInfo *aSlot,CoolKeyInfo *currentInfo)
+ {
+ char tBuff[56];
+ PR_LOG( coolKeyLogHN, PR_LOG_DEBUG, ("%s CKHGetCoolKeyInfo:\n",GetTStamp(tBuff,56)));
+- PK11GenericObject *obj = NULL;
+ SECItem label, ATR;
+ CK_TOKEN_INFO tokenInfo;
+ CoolKeyInfo *info = NULL;
+ SECStatus status;
+- HRESULT hres;
+- int atrSize;
+- char *atrString;
+- SECItem isCOOLKey;
++ HRESULT hres,atrRes,cuidRes,cycleRes;
+
++ CKYBuffer cardATR;
++ CKYBuffer_InitEmpty(&cardATR);
++ char *readerName = PK11_GetSlotName(aSlot);
++
+ memset((void *) &tokenInfo,0,sizeof(tokenInfo));
+ ATR.data = NULL; // initialize for error processing
+ label.data = NULL; // initialize for error processing
+- isCOOLKey.data = NULL;
+
+
+ int isACOOLKey = 0;
++ int isACAC = 0;
++ int isAPIV = 0;
+
+- /* if it's one of "ours" it'll have a reader object */
+- obj = PK11_FindGenericObjects(aSlot, CKO_MOZILLA_READER);
+- if (obj == NULL) {
+- goto failed;
+- }
++ int hasApplet = 0;
++ int isPersonalized = 0;
+
+- // get the reader name (though we probably don't need it anymore
+- status = PK11_ReadRawAttribute(PK11_TypeGeneric, obj, CKA_LABEL, &label);
+- if (status != SECSuccess) {
+- goto failed;
+- }
++ CKYByte lifeCycle = 0;
++
++ char atrChar[100];
++ memset((void*) atrChar,0,sizeof(atrChar));
++
++ char cuidChar[100];
++ memset((void*) cuidChar,0 ,sizeof(cuidChar));
+
+- // get the ATR (though, again, we probably don't need it
+- status = PK11_ReadRawAttribute(PK11_TypeGeneric, obj, CKA_MOZILLA_ATR, &ATR);
+- // PK11_DestroyGenericObjects(obj);
+- if (status != SECSuccess) {
+- goto failed;
+- }
+ // get the CUID/Serial number (we *WILL* continue to need it )
+ status = PK11_GetTokenInfo(aSlot,&tokenInfo);
+ if (status != SECSuccess) {
+ goto failed;
+ }
+
+- //get the are we a CoolKey value
++ tokenInfo.flags=0; //Ignore what opensc says, get the info ourselves later.
++ //Get the life cycle state:
+
+- status = PK11_ReadRawAttribute(PK11_TypeGeneric, obj, CKA_MOZILLA_IS_COOL_KEY, &isCOOLKey);
++ cycleRes = CoolKeyGetLifeCycleDirectly(&lifeCycle,readerName);
+
+- PK11_DestroyGenericObjects(obj);
+- obj = NULL;
++ if(lifeCycle == 0x7) { // applet only
++ hasApplet = 1;
++ }
+
+- if (status != SECSuccess) {
+- goto failed;
++ if(lifeCycle == 0xF) { //personalized
++ hasApplet = 1;
++ isPersonalized = 1;
+ }
+
+- if(isCOOLKey.len == 1)
+- {
+- PR_LOG( coolKeyLogHN, PR_LOG_DEBUG, ("%s CKHGetCoolKeyInfo: CKA_MOZILLA_IS_COOL_KEY %d.\n",GetTStamp(tBuff,56),(int) isCOOLKey.data[0]));
++ //Let's see if we can get the ATR by force explicitly
++
++ atrRes = CoolKeyGetATRDirectly(atrChar,100,readerName);
+
+- isACOOLKey=(int) isCOOLKey.data[0];
+- }
++ if(atrRes == E_FAIL) {
++ goto failed;
++ }
+
+- PR_LOG( coolKeyLogHN, PR_LOG_DEBUG, ("%s CKHGetCoolKeyInfo: info->flags %u.\n",GetTStamp(tBuff,56),tokenInfo.flags));
+-
+- PR_LOG( coolKeyLogHN, PR_LOG_DEBUG, ("%s CKHGetCoolKeyInfo: info->label %s.\n",GetTStamp(tBuff,56),(char *)tokenInfo.label));
+- PR_LOG( coolKeyLogHN, PR_LOG_DEBUG, ("%s CKHGetCoolKeyInfo: info->manufacturerID %s.\n",GetTStamp(tBuff,56),(char *)tokenInfo.manufacturerID));
+- PR_LOG( coolKeyLogHN, PR_LOG_DEBUG, ("%s CKHGetCoolKeyInfo: info->model %s.\n",GetTStamp(tBuff,56),(char *)tokenInfo.model));
+- PR_LOG( coolKeyLogHN, PR_LOG_DEBUG, ("%s CKHGetCoolKeyInfo: info->serialNumber %s.\n",GetTStamp(tBuff,56),(char *)tokenInfo.serialNumber));
++ // Figure out the token type by process of elimination
++ // CAC has a manu id of "Common Access Card" and
++ // PIV has a manu id of "piv II "
++
++ // Since we are configured to only be notified of coolkey's, cac's and piv's
++ // non blank coolkeys will be identified by NOT being cac or piv in the manu id field.
++
++ if(!strcmp((const char *) tokenInfo.manufacturerID,cac_manu_id)) {
++ isACAC = 1;
++ } else if(!strcmp((const char *) tokenInfo.manufacturerID, piv_manu_id)) {
++ isAPIV = 1;
++ } else {
++ isACOOLKey = 1;
++ }
+
+- PR_LOG( coolKeyLogHN, PR_LOG_DEBUG, ("%s CKHGetCoolKeyInfo: info->firmwareVersion.major %d info->firmwareVersion.minor %d \n",GetTStamp(tBuff,56),(int)tokenInfo.firmwareVersion.major,(int) tokenInfo.firmwareVersion.minor));
++ // OK, we have everything we need, now build the COOLKEYInfo structure.
++ // either create a new one or use the one we have already and refresh it
++ if(currentInfo == NULL) {
++ info = new CoolKeyInfo();
++ } else {
++ info = currentInfo;
+
++ if(info->mReaderName) {
++ free(info->mReaderName);
++ }
++ if(info->mCUID) {
++ free(info->mCUID);
++ }
++ if(info->mATR) {
++ free(info->mATR);
++ }
++ info->mInfoFlags = 0;
++ }
+
+- // OK, we have everything we need, now build the COOLKEYInfo structure.
+- info = new CoolKeyInfo();
+ if (!info) {
+ goto failed;
+ }
+
+- atrSize = ATR.len*2+5;
+- atrString = (char *)malloc(atrSize);
+- hres = CoolKeyBinToHex(ATR.data, ATR.len,
+- (unsigned char *) atrString, atrSize, true);
+- /* shouldn't the be != S_SUCCESS? */
+- if (hres == E_FAIL) {
+- free(atrString);
+- goto failed;
++ //Massage the tokenInfo so it adhered to when coolkey was doing it.
++ if(hasApplet) {
++ tokenInfo.firmwareVersion.major = 1;
+ }
+- SECITEM_FreeItem(&ATR,PR_FALSE);
+- ATR.data = NULL;
+
++ if(isPersonalized) {
++ tokenInfo.flags |= CKF_TOKEN_INITIALIZED;
++ }
+
+- PR_LOG( coolKeyLogHN, PR_LOG_DEBUG, ("%s CKHGetCoolKeyInfo: info->atr %s.\n",GetTStamp(tBuff,56),(char *)atrString));
++ info->mInfoFlags = MapGetFlags(&tokenInfo);
+
++ info->mReaderName = strdup(readerName);
+
+- info->mATR = atrString;
+- info->mReaderName= (char *)malloc(label.len+1);
+- if (!info->mReaderName) {
+- goto failed;
++ info->mCUID = (char *)malloc(35); /* should be a define ! */
++
++ if(strlen(atrChar) > 0) {
++ info->mATR = strdup(atrChar);
+ }
+- memcpy(info->mReaderName, label.data, label.len);
+- info->mReaderName[label.len] = 0;
+- info->mInfoFlags = MapGetFlags(&tokenInfo);
+
+- info->mCUID = (char *)malloc(35); /* should be a define ! */
+ if (!info->mCUID) {
+ goto failed;
+ }
++
+ hres = getCUIDFromTokenInfo(&tokenInfo, info->mCUID);
+ /* shouldn't the be != S_SUCCESS? */
+ if (hres == E_FAIL) {
+ goto failed;
+ }
+
++ //Check for blank cuid and put something there
++
++ if(isACOOLKey && strlen(info->mCUID) == 0 )
++ {
++ //Let's try to get the cuid directly from the token.
++
++ cuidRes = CoolKeyGetCUIDDirectly(cuidChar, 100, readerName);
++
++ if(cuidRes != S_OK) {
++ strcpy(info->mCUID, "blank-token");
++ } else {
++ strcpy(info->mCUID, cuidChar);
++ }
++ }
++
+ PR_LOG( coolKeyLogHN, PR_LOG_DEBUG, ("%s CKHGetCoolKeyInfo: tokenInfo.label length %d.\n",GetTStamp(tBuff,56),strlen((char *) tokenInfo.label)));
+
+ // Give the CAC card some sort of unique key ID
+
+- if(strlen(info->mCUID) == 0)
++ if(isACAC && strlen(info->mCUID) == 0)
+ {
+ strncpy(info->mCUID,(char *)tokenInfo.label,35);
+ info->mCUID[34] = 0;
+@@ -2186,26 +2255,20 @@ CKHGetCoolKeyInfo(PK11SlotInfo *aSlot)
+ info->mInfoFlags |= COOLKEY_INFO_IS_REALLY_A_COOLKEY_MASK;
+ }
+
+- SECITEM_FreeItem(&ATR,PR_FALSE);
+ SECITEM_FreeItem(&label,PR_FALSE);
+- SECITEM_FreeItem(&isCOOLKey,PR_FALSE);
+
+ info->mSlot = PK11_ReferenceSlot(aSlot);
+ info->mSeries = PK11_GetSlotSeries(aSlot);
+ return info;
+
+ failed:
+- if (ATR.data) {
+- SECITEM_FreeItem(&ATR,PR_FALSE);
+- }
+ if (label.data) {
+ SECITEM_FreeItem(&label,PR_FALSE);
+ }
+- if (obj) {
+- PK11_DestroyGenericObjects(obj);
+- }
+ if (info) {
+ delete info;
+ }
++
++ CKYBuffer_FreeData(&cardATR);
+ return NULL;
+ }
+diff -up ./esc/src/lib/coolkey/CoolKeyHandler.h.fix1 ./esc/src/lib/coolkey/CoolKeyHandler.h
+--- ./esc/src/lib/coolkey/CoolKeyHandler.h.fix1 2017-07-24 16:46:36.000000000 -0700
++++ ./esc/src/lib/coolkey/CoolKeyHandler.h 2018-04-26 11:44:38.445986146 -0700
+@@ -115,7 +115,10 @@ class CoolKeyHandler
+ HRESULT Renew(void);
+ HRESULT Format(const char *aTokenType);
+ HRESULT Disconnect();
+-
++
++ //APDU related
++
++ CKYBuffer *processTokenPDU(CoolKeyHandler *context, CKYAPDU *apdu);
+
+ //Http Related
+
+@@ -259,7 +262,7 @@ eCKMessage *AllocateMessage(eCKMessage::
+
+
+ void DisplayEndDialog(int operation, int result, int description);
+-CoolKeyInfo *CKHGetCoolKeyInfo(PK11SlotInfo *aSlot);
++CoolKeyInfo *CKHGetCoolKeyInfo(PK11SlotInfo *aSlot,CoolKeyInfo *currentInfo);
+ unsigned int CKHGetInfoFlags(PK11SlotInfo *aSlot);
+
+ #endif /* CoolKeyHandler.h__ */
+diff -up ./esc/src/lib/coolkey/CoolKey.h.fix1 ./esc/src/lib/coolkey/CoolKey.h
+--- ./esc/src/lib/coolkey/CoolKey.h.fix1 2017-07-24 16:46:36.000000000 -0700
++++ ./esc/src/lib/coolkey/CoolKey.h 2018-04-26 11:44:38.446986140 -0700
+@@ -32,6 +32,9 @@
+ #include <vector>
+ #include <string>
+
++#include "cky_base.h"
++#include "cky_applet.h"
++
+ ////////////////////////////////////////////////////////////////////////
+ //
+ // Public Structures and Functions:
+@@ -185,7 +188,6 @@ COOLKEY_API HRESULT CoolKeyInitializeLog
+ COOLKEY_API HRESULT CoolKeyLogMsg(int logLevel, const char *fmt, ...);
+
+ COOLKEY_API HRESULT CoolKeyLogNSSStatus();
+-
+ //Utility time function
+ char *GetTStamp(char *aTime,int aSize);
+ }
+@@ -262,8 +264,10 @@ const char *CoolKeyGetKeyID(const char *
+ const char *CoolKeyGetConfig(const char *aName);
+ HRESULT CoolKeySetConfig(const char *aName,const char *aValue);
+ CoolKeyBadCertHandler CoolKeyGetBadCertHandler();
+-
+-
++HRESULT CoolKeyGetATRDirectly(char *aBuff, int aBuffLen, const char *readerName);
++HRESULT CoolKeyGetCUIDDirectly(char *aBuff, int aBuffLen, const char *readerName);
++HRESULT CoolKeyGetCPLCDataDirectly(CKYAppletRespGetCPLCData *cplc,const char *readerName);
++HRESULT CoolKeyGetLifeCycleDirectly(CKYByte *personalized,const char *readerName);
+
+ }
+
+diff -up ./esc/src/lib/coolkey/CoolKey_Message.cpp.fix1 ./esc/src/lib/coolkey/CoolKey_Message.cpp
+--- ./esc/src/lib/coolkey/CoolKey_Message.cpp.fix1 2017-07-24 16:46:36.000000000 -0700
++++ ./esc/src/lib/coolkey/CoolKey_Message.cpp 2018-04-26 11:44:38.446986140 -0700
+@@ -941,7 +941,7 @@ void eCKMessage_BEGIN_OP::encode(string
+
+ int size = extensions.length();
+
+- if(aOutputVal[size -1 ] == '&')
++ if(extensions[size -1 ] == '&')
+ {
+ extensions.erase(size -1);
+ }
+diff -up ./esc/src/lib/coolkey/dynlink.c.fix1 ./esc/src/lib/coolkey/dynlink.c
+--- ./esc/src/lib/coolkey/dynlink.c.fix1 2018-04-26 11:44:38.447986134 -0700
++++ ./esc/src/lib/coolkey/dynlink.c 2018-04-26 11:44:38.447986134 -0700
+@@ -0,0 +1,37 @@
++/* ***** BEGIN COPYRIGHT BLOCK *****
++ * Copyright (C) 2005 Red Hat, Inc.
++ * All rights reserved.
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation version
++ * 2.1 of the License.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
++ * ***** END COPYRIGHT BLOCK ***** */
++
++#ifdef HAVE_CONFIG_H
++#include <config.h>
++#endif
++
++#ifdef WIN32
++#include "dynlink_win.c"
++#else
++#ifdef MAC
++#include "dynlink_mac.c"
++#else
++#ifdef HAVE_DLFCN_H
++#include "dynlink_unix.c"
++#else
++#error "Platform not supported... add dynlink_PLAT.c and update dynlink.c"
++#endif
++#endif
++#endif
++
+diff -up ./esc/src/lib/coolkey/dynlink.h.fix1 ./esc/src/lib/coolkey/dynlink.h
+--- ./esc/src/lib/coolkey/dynlink.h.fix1 2018-04-26 11:44:38.447986134 -0700
++++ ./esc/src/lib/coolkey/dynlink.h 2018-04-26 11:44:38.447986134 -0700
+@@ -0,0 +1,54 @@
++/* ***** BEGIN COPYRIGHT BLOCK *****
++ * Copyright (C) 2005 Red Hat, Inc.
++ * All rights reserved.
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation version
++ * 2.1 of the License.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
++ * ***** END COPYRIGHT BLOCK ***** */
++
++/*
++ * the following header file is private to the CoolKey library.
++ * This is because CoolKey library is supposed to operate in the PKCS #11
++ * module which needs to be independent of runtimes like NSPR. Longer term
++ * there should be a generic version of this which uses the application
++ * runtime, and pkcs #11 supplies it's only copy of these functions.
++ */
++#ifndef CKY_SHLIB_H
++#define CKY_SHLIB_H 1
++
++#undef QUOTE
++#undef QUOTE_MACRO
++#define QUOTE(arg) #arg
++#define QUOTE_MACRO(arg) QUOTE(arg)
++
++/* Hmmm maybe this should be hidden in getAddress? */
++#ifdef MAC
++#define DLL_SYM_PREFIX "_"
++#else
++#define DLL_SYM_PREFIX
++#endif
++
++#define MAKE_DLL_SYMBOL(name) DLL_SYM_PREFIX QUOTE(name)
++
++typedef void *ckyShLibrary;
++
++ckyShLibrary ckyShLibrary_open(const char *libname);
++CKYStatus ckyShLibrary_close(ckyShLibrary libHandle);
++CKYStatus ckyShLibrary_getAddress(ckyShLibrary libHandle,
++ void **func, const char *funcName);
++
++#ifdef MAC
++void ckyShLibrary_setParent(char *name);
++#endif
++#endif
+diff -up ./esc/src/lib/coolkey/dynlink_mac.c.fix1 ./esc/src/lib/coolkey/dynlink_mac.c
+--- ./esc/src/lib/coolkey/dynlink_mac.c.fix1 2018-04-26 11:44:38.447986134 -0700
++++ ./esc/src/lib/coolkey/dynlink_mac.c 2018-04-26 11:44:38.447986134 -0700
+@@ -0,0 +1,147 @@
++/* ***** BEGIN COPYRIGHT BLOCK *****
++ * Copyright (C) 2005 Red Hat, Inc.
++ * All rights reserved.
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation version
++ * 2.1 of the License.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
++ ***** END COPYRIGHT BLOCK *****/
++
++#include <mach-o/dyld.h>
++#include <stdio.h>
++#include "cky_base.h"
++#include "dynlink.h"
++#include "string.h"
++#include "stdlib.h"
++
++#define EXEPATH "@executable_path/"
++#define SYSPATH "/System/Library/Frameworks/"
++
++static char *ckyShLibrary_parent = NULL;
++
++/* allow the parent library to set our name */
++void
++ckyShLibrary_setParent(char *p)
++{
++ ckyShLibrary_parent = p;
++}
++
++#ifdef nodef
++/* get the parent librarie's path */
++char *
++ckyShLibrary_getParentPath()
++{
++ char *result;
++ char *image_name;
++ int i, count = _dyld_image_count();
++
++ if (ckyShLibrary_parent == NULL) {
++ return NULL;
++ }
++
++ for (i = 0; i < count; i++) {
++ image_name = _dyld_get_image_name(i);
++ if (strstr(image_name, ckyShLibrary_parent) != NULL) {
++ result = malloc(strlen(image_name)+1);
++ if (result != NULL) {
++ char *truncate;
++ strcpy(result, image_name);
++ truncate = strrchr(result,'/');
++ if (truncate) {
++ *(truncate+1) = 0;
++ }
++ }
++ return result;
++ }
++ }
++ return NULL;
++}
++#endif
++
++ckyShLibrary
++ckyShLibrary_open(const char *libname)
++{
++ const struct mach_header *library;
++ /*char *parentPath = ckyShLibrary_getParentPath(); */
++ char *libPath = NULL;
++ int len = sizeof(SYSPATH);
++
++#ifdef notdef
++ if (parentPath) {
++ int pLen = strlen(parentPath)+1;
++ if (pLen > len) {
++ len = pLen;
++ }
++ }
++#endif
++
++ libPath = malloc(len+strlen(libname)+1);
++ /* if we couldn't get the space, just use the LD_LIBPATH */
++ if (libPath) {
++#ifdef notdef
++ /* first try the parent DLL path if known */
++ if (parentPath) {
++ /* then try the path of the shared library */
++ strcpy(libPath,parentPath);
++ strcat(libPath,libname);
++ free(parentPath);
++ library = NSAddImage(libPath,
++ NSADDIMAGE_OPTION_RETURN_ON_ERROR |
++ NSADDIMAGE_OPTION_WITH_SEARCHING);
++ if (library) {
++ free(libPath);
++ return (ckyShLibrary)library;
++ }
++ }
++#endif
++ /* the try the executable's lib path */
++ strcpy(libPath,SYSPATH);
++ strcat(libPath,libname);
++ library = NSAddImage(libPath,
++ NSADDIMAGE_OPTION_RETURN_ON_ERROR |
++ NSADDIMAGE_OPTION_WITH_SEARCHING);
++ free(libPath);
++ if (library) {
++ return (ckyShLibrary)library;
++ }
++ }
++
++ /* finally grab it from the system libpath */
++ library = NSAddImage(libname,
++ NSADDIMAGE_OPTION_RETURN_ON_ERROR |
++ NSADDIMAGE_OPTION_WITH_SEARCHING);
++ return (ckyShLibrary)library;
++}
++
++CKYStatus
++ckyShLibrary_close(ckyShLibrary _lib)
++{
++ // Can't unload an image on Mac OS X.
++ return CKYSUCCESS;
++}
++
++CKYStatus
++ckyShLibrary_getAddress(const ckyShLibrary _lib, void ** func,
++ const char *funcName)
++{
++ const struct mach_header *library = (const struct mach_header *)_lib;
++ NSSymbol symbol;
++ symbol = NSLookupSymbolInImage(library, funcName,
++ NSLOOKUPSYMBOLINIMAGE_OPTION_BIND |
++ NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR);
++ if( symbol == NULL ) {
++ return CKYLIBFAIL;
++ }
++ *func = NSAddressOfSymbol(symbol);
++ return CKYSUCCESS;
++}
+diff -up ./esc/src/lib/coolkey/dynlink_unix.c.fix1 ./esc/src/lib/coolkey/dynlink_unix.c
+--- ./esc/src/lib/coolkey/dynlink_unix.c.fix1 2018-04-26 11:44:38.447986134 -0700
++++ ./esc/src/lib/coolkey/dynlink_unix.c 2018-04-26 11:44:38.447986134 -0700
+@@ -0,0 +1,66 @@
++/* ***** BEGIN COPYRIGHT BLOCK *****
++ * Copyright (C) 2005 Red Hat, Inc.
++ * All rights reserved.
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation version
++ * 2.1 of the License.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
++ * ***** END COPYRIGHT BLOCK ***** */
++
++#include <dlfcn.h>
++#include <unistd.h>
++#if !defined(MAC) && !defined(HPUX)
++#include <link.h>
++#endif
++#include <assert.h>
++
++#include "cky_base.h"
++#include "dynlink.h"
++
++ckyShLibrary
++ckyShLibrary_open(const char *libname)
++{
++ void *library;
++
++ library = dlopen(libname, RTLD_LAZY);
++ return library;
++}
++
++CKYStatus
++ckyShLibrary_close(ckyShLibrary library)
++{
++ int rv;
++
++ if (library == NULL) {
++ return CKYSUCCESS;
++ }
++
++ rv = dlclose(library);
++ if( rv != 0 ) {
++ return CKYLIBFAIL;
++ }
++ return CKYSUCCESS;
++}
++
++CKYStatus
++ckyShLibrary_getAddress(const ckyShLibrary library, void **func,
++ const char *funcName)
++{
++ assert(library);
++ void* f = dlsym(library, funcName);
++ if( f == NULL ) {
++ return CKYLIBFAIL;
++ }
++ *func = f;
++ return CKYSUCCESS;
++}
+diff -up ./esc/src/lib/coolkey/dynlink_win.c.fix1 ./esc/src/lib/coolkey/dynlink_win.c
+--- ./esc/src/lib/coolkey/dynlink_win.c.fix1 2018-04-26 11:44:38.447986134 -0700
++++ ./esc/src/lib/coolkey/dynlink_win.c 2018-04-26 11:44:38.447986134 -0700
+@@ -0,0 +1,66 @@
++/* ***** BEGIN COPYRIGHT BLOCK *****
++ * Copyright (C) 2005 Red Hat, Inc.
++ * All rights reserved.
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation version
++ * 2.1 of the License.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
++ * ***** END COPYRIGHT BLOCK ***** */
++
++#include <Windows.h>
++#include "cky_base.h"
++#include "dynlink.h"
++
++
++ckyShLibrary
++ckyShLibrary_open(const char *libname)
++{
++ HMODULE library;
++ library = LoadLibrary(libname);
++
++ return (ckyShLibrary) library;
++}
++
++CKYStatus
++ckyShLibrary_close(ckyShLibrary _lib)
++{
++ HMODULE library = (HMODULE) _lib;
++ BOOL ret;
++
++ if( library == NULL ) {
++ return CKYSUCCESS;
++ }
++
++ ret = FreeLibrary(library);
++ library = NULL;
++
++ if (!ret) {
++ return CKYLIBFAIL;
++ }
++
++ return CKYSUCCESS;
++}
++
++CKYStatus
++ckyShLibrary_getAddress(const ckyShLibrary _lib, void **func,
++ const char *funcName)
++{
++ const HMODULE library = (const HMODULE) _lib;
++
++ *func = (void *)GetProcAddress(library, funcName);
++ if (*func == NULL) {
++ return CKYLIBFAIL;
++ }
++
++ return CKYSUCCESS;
++}
+diff -up ./esc/src/lib/coolkey/manifest.mn.fix1 ./esc/src/lib/coolkey/manifest.mn
+--- ./esc/src/lib/coolkey/manifest.mn.fix1 2017-07-24 16:46:36.000000000 -0700
++++ ./esc/src/lib/coolkey/manifest.mn 2018-04-26 11:44:38.448986129 -0700
+@@ -22,14 +22,13 @@ XULRUNNER_BASE=$(CORE_DEPTH)/dist/$(OBJD
+ SYS_INC = /usr/include
+ MODULE = ckymanager
+ LIBRARY_NAME = $(MODULE)
+-REQUIRES = httpchunked nss nspr ckyapplet
++REQUIRES = httpchunked nss nspr
+ ifndef MOZ_OFFSET
+ MOZ_OFFSET = mozilla-1.7.13
+ endif
+ DEFINES += -I$(CORE_DEPTH)/esc/app/xpcom -I$(SYS_INC)/nspr4 -I$(SYS_INC)/nss3 -I$(SYS_INC)/PCSC -I$(SYS_INC)/$(MOZ_OFFSET)/nspr -I$(SYS_INC)/$(MOZ_OFFSET)/nss -I$(XULRUNNER_BASE)/dist/public/nss -I$(XULRUNNER_BASE)/dist/include/nspr -I$(GECKO_SDK_PATH)/include/nspr -I$(GECKO_SDK_PATH)/include/nss -fno-strict-aliasing
+ MAPFILE = $(OBJDIR)/ckymanager.def
+
+-#EXTRA_LIBS += -L$(DIST)/lib -lckyapplet
+
+ CPPSRCS = \
+ NSSManager.cpp \
+@@ -39,7 +38,13 @@ CPPSRCS = \
+ CoolKey.cpp \
+ SmartCardMonitoringThread.cpp \
+ $(NULL)
+-
++CSRCS =\
++ cky_applet.c \
++ cky_base.c \
++ cky_card.c \
++ cky_factory.c \
++ dynlink_unix.c \
++ $(NULL)
+ EXPORTS = \
+ CoolKey.h \
+ $(NULL)
+diff -up ./esc/src/lib/coolkey/NSSManager.cpp.fix1 ./esc/src/lib/coolkey/NSSManager.cpp
+--- ./esc/src/lib/coolkey/NSSManager.cpp.fix1 2017-07-24 16:46:36.000000000 -0700
++++ ./esc/src/lib/coolkey/NSSManager.cpp 2018-04-26 11:44:38.448986129 -0700
+@@ -102,7 +102,7 @@ HRESULT NSSManager::InitNSS(const char *
+
+ char modSpec[512];
+
+- sprintf(modSpec,"library=\"%s\" name=\"%s\" parameters=\"%s\" NSS=\"slotParams={0x00000002=[slotFlags='PublicCerts']}\"\n",COOLKEY_PKCS11_LIBRARY,COOLKEY_NAME,PROMISCUOUS_PARAMETER);
++ sprintf(modSpec,"library=\"%s\" name=\"%s\" NSS=\"slotParams={0x00000002=[slotFlags='PublicCerts']}\"\n",COOLKEY_PKCS11_LIBRARY,COOLKEY_NAME,PROMISCUOUS_PARAMETER);
+
+ PR_LOG( coolKeyLogNSS, PR_LOG_DEBUG, ("%s InitNSS: modSpec %s\n",GetTStamp(tBuff,56),modSpec));
+
+diff -up ./esc/src/lib/coolkey/NSSManager.h.fix1 ./esc/src/lib/coolkey/NSSManager.h
+--- ./esc/src/lib/coolkey/NSSManager.h.fix1 2017-07-24 16:46:36.000000000 -0700
++++ ./esc/src/lib/coolkey/NSSManager.h 2018-04-26 11:44:38.458986071 -0700
+@@ -18,7 +18,7 @@
+ #ifdef DARWIN
+ #define COOLKEY_PKCS11_LIBRARY "/Library/Application Support/CoolKey/PKCS11/libcoolkeypk11.dylib"
+ #else
+-#define COOLKEY_PKCS11_LIBRARY DLL_PREFIX"coolkeypk11."DLL_SUFFIX
++#define COOLKEY_PKCS11_LIBRARY "onepin-opensc-pkcs11."DLL_SUFFIX
+ #endif
+
+ #define COOLKEY_NAME "COOL Key Module"
+diff -up ./esc/src/lib/coolkey/SmartCardMonitoringThread.cpp.fix1 ./esc/src/lib/coolkey/SmartCardMonitoringThread.cpp
+--- ./esc/src/lib/coolkey/SmartCardMonitoringThread.cpp.fix1 2017-07-24 16:46:36.000000000 -0700
++++ ./esc/src/lib/coolkey/SmartCardMonitoringThread.cpp 2018-04-26 11:44:38.460986059 -0700
+@@ -81,7 +81,7 @@ void SmartCardMonitoringThread::Insert(P
+ PR_LOG( coolKeyLogSC, PR_LOG_DEBUG,
+ ("%s SmartCardMonitoringThread::Insert Key. \n",GetTStamp(tBuff,56)));
+
+- CoolKeyInfo *info = CKHGetCoolKeyInfo(aSlot);
++ CoolKeyInfo *info = CKHGetCoolKeyInfo(aSlot,NULL);
+ if (info) {
+ if (!InsertCoolKeyInfoIntoCoolKeyList(info)) {
+ AutoCoolKey key(eCKType_CoolKey, info->mCUID);
+diff -up ./esc/src/lib/NssHttpClient/manifest.mn.fix1 ./esc/src/lib/NssHttpClient/manifest.mn
+--- ./esc/src/lib/NssHttpClient/manifest.mn.fix1 2017-07-24 16:46:36.000000000 -0700
++++ ./esc/src/lib/NssHttpClient/manifest.mn 2018-04-26 11:44:38.462986047 -0700
+@@ -31,7 +31,7 @@ endif
+
+
+ MAPFILE = $(OBJDIR)/httpchunked.def
+-DEFINES = -I$(SYS_INC)/nspr4 -I$(SYS_INC)/nss3 -I$(SYS_INC)/$(MOZ_OFFSET)/nspr -I$(SYS_INC)/$(MOZ_OFFSET)/nss -I$(XULRUNNER_BASE)/dist/public/nss -I$(XULRUNNER_BASE)/dist/include/nspr -I$(GECKO_SDK_PATH)/include/nspr -I$(GECKO_SDK_PATH)/include/nss
++DEFINES = -I$(SYS_INC)/nspr4 -I$(SYS_INC)/nss3 -I$(SYS_INC)/$(MOZ_OFFSET)/nspr -I$(SYS_INC)/$(MOZ_OFFSET)/nss -I$(XULRUNNER_BASE)/dist/public/nss -I$(XULRUNNER_BASE)/dist/include/nspr -I$(GECKO_SDK_PATH)/include/nspr -I$(GECKO_SDK_PATH)/include/nss -I$(SYS_INC)/PCSC -I$(CORE_DEPTH)/src/lib/coolkey
+
+ CPPSRCS = \
+ Cache.cpp \
diff --git a/esc-1.1.1-fix2.patch b/esc-1.1.1-fix2.patch
new file mode 100644
index 0000000..95c2642
--- /dev/null
+++ b/esc-1.1.1-fix2.patch
@@ -0,0 +1,11 @@
+diff -up ./esc/src/xulrunner/xulrunner-mozconfig.fix2 ./esc/src/xulrunner/xulrunner-mozconfig
+--- ./esc/src/xulrunner/xulrunner-mozconfig.fix2 2018-04-30 13:48:53.944086197 -0700
++++ ./esc/src/xulrunner/xulrunner-mozconfig 2018-04-30 13:49:22.804921349 -0700
+@@ -37,6 +37,7 @@ ac_add_options --disable-skia
+ ac_add_options --with-system-nspr
+ ac_add_options --with-system-nss
+ ac_add_options --disable-crashreporter
++ac_add_options --disable-startupcache
+
+ export BUILD_OFFICIAL=1
+ export MOZILLA_OFFICIAL=1
diff --git a/esc.spec b/esc.spec
index 3fea7ec..1dbd84d 100644
--- a/esc.spec
+++ b/esc.spec
@@ -1,6 +1,6 @@
Name: esc
Version: 1.1.1
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Enterprise Security Client Smart Card Client
License: GPL+
URL: http://directory.fedora.redhat.com/wiki/CoolKey
@@ -10,6 +10,8 @@ Group: Applications/Internet
%global libnotify_version 0.7.0
%global libvpx_version 1.0.0
+Patch1: esc-1.1.1-fix1.patch
+Patch2: esc-1.1.1-fix2.patch
BuildRequires: doxygen fontconfig-devel
BuildRequires: glib2-devel atk-devel
@@ -17,7 +19,7 @@ BuildRequires: pkgconfig
BuildRequires: nspr-devel nss-devel nss-static
BuildRequires: libX11-devel libXt-devel
-BuildRequires: pcsc-lite-devel coolkey-devel
+BuildRequires: pcsc-lite-devel
BuildRequires: desktop-file-utils zip binutils
BuildRequires: libnotify-devel >= %{libnotify_version}
BuildRequires: dbus-devel
@@ -46,10 +48,11 @@ BuildRequires: yasm
BuildRequires: dbus-glib-devel
BuildRequires: libffi-devel
BuildRequires: sqlite-devel
+BuildRequires: opensc
Requires: sqlite
-Requires: pcsc-lite coolkey nss nspr
+Requires: pcsc-lite nss nspr
Requires: zip dbus >= 0.90 libnotify >= 0.4.2
Requires: mozilla-filesystem
Requires: nspr-devel
@@ -72,12 +75,14 @@ Requires: alsa-lib-devel
Requires: libnotify-devel
Requires: mesa-libGL-devel
Requires: libvpx-devel >= %{libvpx_version}
+Requires: opensc
-# 390 does not have coolkey or smartCards
+# 390 does not have smartCards
ExcludeArch: s390 s390x
-#xulrunner doesn't seem to support this one
-ExcludeArch: aarch64
+#xulrunner doesn't seem to support these right now
+#Temporary anyway, since xulrunner is going away soon.
+ExcludeArch: aarch64 i686
# We can't allow the internal xulrunner to leak out
AutoReqProv: 0
@@ -116,6 +121,9 @@ cryptographic smartcards.
#patch esc
+%patch1 -p1 -b .fix1
+%patch2 -p1 -b .fix2
+
r=$(uname -r | sed -e 's/\(^[^.]*\.[^.]*\).*/\1/')
[ -f esc/coreconf/Linux$r.mk ] || ln -s Linux3.5.mk esc/coreconf/Linux$r.mk
@@ -210,10 +218,13 @@ chmod 755 $RPM_BUILD_ROOT/%{escdir}/application.ini
%license %{docdir}/LICENSE
%{escdir}/esc
+%attr(755, root, root) %{escdir}/esc
%{escdir}/escd
%{escbindir}/esc
%{escdir}/application.ini
-
+%{escdir}/opensc.esc.conf
+%dir %{escdir}/chrome
+%dir %{escdir}/defaults
%{escdir}/chrome.manifest
%{escdir}/chrome/chrome.manifest
@@ -236,6 +247,8 @@ killall --exact -q escd
exit 0
%changelog
+* Mon Apr 23 2018 Jack Magne <jmagne(a)redhat.com> - 1.1.1-4
+- Remove coolkey dependencies, replace with opensc.
* Wed Feb 07 2018 Fedora Release Engineering <releng(a)fedoraproject.org> - 1.1.1-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
5 years, 11 months
Architecture specific change in rpms/cyrus-imapd.git
by githook-noreply@fedoraproject.org
The package rpms/cyrus-imapd.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/cyrus-imapd.git/commit/?id=f27231....
Change:
+%ifarch s390x
Thanks.
Full change:
============
commit f27231a2dc0a7a64a10f1f7c365961671fff88a4
Author: Jason Tibbitts <tibbs(a)math.uh.edu>
Date: Thu Jun 7 11:01:52 2018 -0500
Re-exclude maxforkrate test on s390x.
diff --git a/cyrus-imapd.spec b/cyrus-imapd.spec
index c5f2586..938fda6 100644
--- a/cyrus-imapd.spec
+++ b/cyrus-imapd.spec
@@ -493,6 +493,14 @@ tests=(
for i in ${tests[@]}; do exclude+=("!$i"); done
%endif
+%ifarch s390x
+# This one test fails occasionally on s390x because the hosts are just too slow
+# to complete it.D It's testing something valid (that the fork rate limiting
+# settings work properly) but s390x can't fork quickly enough to exceeed the
+# limits it's testing.
+exclude+=("!Master.maxforkrate")
+%endif
+
# Add -vvv for too much output
./testrunner.pl %{?_smp_mflags} -v -f pretty ${exclude[@]} 2>&1
@@ -601,9 +609,10 @@ getent passwd cyrus >/dev/null || /usr/sbin/useradd -c "Cyrus IMAP Server" -d /v
%changelog
-* Fri Jun 01 2018 Jason L Tibbitts III <tibbs(a)math.uh.edu> - 3.0.7-4
+* Thu Jun 07 2018 Jason L Tibbitts III <tibbs(a)math.uh.edu> - 3.0.7-4
- Update Cassandane checkout. Drop upstreamed patch.
- Patch code for RECONSTRUCT implementation to use the renamed cyr_quota.
+- Re-exclude maxforkrate test on s390x.
* Wed May 30 2018 Jason L Tibbitts III <tibbs(a)math.uh.edu> - 3.0.7-3
- Remove ldconfig scriptlets.
5 years, 11 months
Architecture specific change in rpms/java-1.8.0-openjdk.git
by githook-noreply@fedoraproject.org
The package rpms/java-1.8.0-openjdk.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/java-1.8.0-openjdk.git/commit/?id....
Change:
+%ifarch %{ix86}
Thanks.
Full change:
============
commit 711d9890501d0e32f6699b7c985da47e4309f388
Author: Jiri Vanek <jvanek(a)redhat.com>
Date: Thu Jun 7 14:03:36 2018 +0200
Returned patch 104 as shenandoah only. Semantically aligned with java-openjdk
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..61b3b69
--- /dev/null
+++ b/README.md
@@ -0,0 +1,8 @@
+Package of LTS OpenJDK 8
+OpenJDK have release cadence of 6 months. but 3/4 of them are Short Term Supported for 6 months only. This package is designed to harbore them. Currently it is build on openJDK 10. LTSs (next is 11) will go as separate packages.
+
+JDK8 is last LTS release of Java platform. It is bringing many cool improvements - http://openjdk.java.net/projects/jdk/8/ and is landing to your RHEL. Where it will be maintained for several years. You will always be allowed to install Used LTSs in build root, and alongside via alternatives.
+
+See announcement: http://mail.openjdk.java.net/pipermail/discuss/2017-September/004281.html
+See java SIG plans: https://jvanek.fedorapeople.org/devconf/2018/changesInjavaReleaseProcess.pdf
+
diff --git a/README.src b/README.src
deleted file mode 100644
index b5f06d1..0000000
--- a/README.src
+++ /dev/null
@@ -1,2 +0,0 @@
-The java-1.8.0-openjdk-src subpackage contains the complete OpenJDK 8
-class library source code for use by IDE indexers and debuggers.
diff --git a/java-1.8.0-openjdk.spec b/java-1.8.0-openjdk.spec
index 78135ec..d5b3eb6 100644
--- a/java-1.8.0-openjdk.spec
+++ b/java-1.8.0-openjdk.spec
@@ -1,19 +1,20 @@
%define _find_debuginfo_opts -g
-# note, parametrised macros are order-senisitve (unlike not-parametrized) even with normal macros
-# also necessary when passing it as parameter other macros. If not macro, then it is considered as switch
-%global debug_suffix_unquoted -debug
+# note: parametrized macros are order-sensitive (unlike not-parametrized) even with normal macros
+# also necessary when passing it as parameter to other macros. If not macro, then it is considered a switch
+# see the difference between global and deffine:
+# See https://github.com/rpm-software-management/rpm/issues/127 to comments at "pmatilai commented on Aug 18, 2017"
+# (initiated in https://bugzilla.redhat.com/show_bug.cgi?id=1482192)
+%global debug_suffix_unquoted -slowdebug
# quoted one for shell operations
%global debug_suffix "%{debug_suffix_unquoted}"
%global normal_suffix ""
-#if you wont only debug build, but providing java, build only normal build, but set normalbuild_parameter
-%global debugbuild_parameter slowdebug
-%global normalbuild_parameter release
-%global debug_warning This package have full debug on. Install only in need, and remove asap.
+# if you want only debug build but providing java build only normal build but set normalbuild_parameter
+%global debug_warning This package has full debug on. Install only in need and remove asap.
%global debug_on with full debug on
%global for_debug for packages with debug on
-# by default we build normal build always.
+# by default we build normal build
%global include_normal_build 1
%if %{include_normal_build}
%global build_loop1 %{normal_suffix}
@@ -22,7 +23,7 @@
%endif
%global aarch64 aarch64 arm64 armv8
-# sometimes we need to distinguish big and little endian PPC64
+# we need to distinguish between big and little endian PPC64
%global ppc64le ppc64le
%global ppc64be ppc64 ppc64p7
%global multilib_arches %{power64} sparc64 x86_64
@@ -30,10 +31,14 @@
# By default, we build a debug build during main build on JIT architectures
%ifarch %{jit_arches}
+%ifnarch %{arm}
%global include_debug_build 1
%else
%global include_debug_build 0
%endif
+%else
+%global include_debug_build 0
+%endif
# On x86_64 and AArch64, we use the Shenandoah HotSpot
%ifarch x86_64 %{aarch64}
@@ -42,16 +47,17 @@
%global use_shenandoah_hotspot 0
%endif
+
%if %{include_debug_build}
%global build_loop2 %{debug_suffix}
%else
%global build_loop2 %{nil}
%endif
-# if you disable both builds, then build fails
+# if you disable both builds, then the build fails
%global build_loop %{build_loop1} %{build_loop2}
-# note, that order normal_suffix debug_suffix, in case of both enabled,
-# is expected in one single case at the end of build
+# note: that order: normal_suffix debug_suffix, in case of both enabled
+# is expected in one single case at the end of the build
%global rev_build_loop %{build_loop2} %{build_loop1}
%ifarch %{jit_arches}
@@ -75,9 +81,9 @@
%global ourcppflags %(echo %ourflags | sed -e 's|-fexceptions||')
%global ourldflags %{__global_ldflags}
-# With diabled nss is NSS deactivated, so in NSS_LIBDIR can be wrong path
-# the initialisation must be here. LAter the pkg-connfig have bugy behaviour
-#looks liekopenjdk RPM specific bug
+# With disabled nss is NSS deactivated, so NSS_LIBDIR can contain the wrong path
+# the initialisation must be here. Later the pkg-config have buggy behaviour
+# looks like openjdk RPM specific bug
# Always set this so the nss.cfg file is not broken
%global NSS_LIBDIR %(pkg-config --variable=libdir nss)
%global NSS_LIBS %(pkg-config --libs nss)
@@ -85,13 +91,14 @@
# see https://bugzilla.redhat.com/show_bug.cgi?id=1332456
%global NSSSOFTOKN_BUILDTIME_NUMBER %(pkg-config --modversion nss-softokn || : )
%global NSS_BUILDTIME_NUMBER %(pkg-config --modversion nss || : )
-#this is worakround for processing of requires during srpm creation
+# this is workaround for processing of requires during srpm creation
%global NSSSOFTOKN_BUILDTIME_VERSION %(if [ "x%{NSSSOFTOKN_BUILDTIME_NUMBER}" == "x" ] ; then echo "" ;else echo ">= %{NSSSOFTOKN_BUILDTIME_NUMBER}" ;fi)
%global NSS_BUILDTIME_VERSION %(if [ "x%{NSS_BUILDTIME_NUMBER}" == "x" ] ; then echo "" ;else echo ">= %{NSS_BUILDTIME_NUMBER}" ;fi)
# fix for https://bugzilla.redhat.com/show_bug.cgi?id=1111349
-%global _privatelibs libmawt[.]so.*
+%global _privatelibs libmawt[.]so.* libattach[.]so.* libawt[.]so.* libextnet[.]so.* libjsig[.]so.* libawt_headless[.]so.* libdt_socket[.]so.* libfontmanager[.]so.* libinstrument[.]so.* libj2gss[.]so.* libj2pcsc[.]so.* libj2pkcs11[.]so.* libjaas_unix[.]so.* libjavajpeg[.]so.* libjdwp[.]so.* libjimage[.]so.* libjsound[.]so.* liblcms[.]so.* libmanagement[.]so.* libmanagement_agent[.]so.* libmanagement_ext[.]so.* libmlib_image[.]so.* libnet[.]so.* libnio[.]so.* libprefs[.]so.* librmi[.]so.* libsaproc[.]so.* libsctp[.]so.* libunpack[.]so.* libverify[.]so.* libzip[.]so.* libjsoundalsa[.]so.* libsplashscreen[.]so.* libawt_xawt[.]so.*
+
%global __provides_exclude ^(%{_privatelibs})$
%global __requires_exclude ^(%{_privatelibs})$
@@ -101,64 +108,57 @@
# does not match that given by _build_cpu
%ifarch x86_64
%global archinstall amd64
-%global stapinstall x86_64
%endif
%ifarch ppc
%global archinstall ppc
-%global stapinstall powerpc
%endif
%ifarch %{ppc64be}
%global archinstall ppc64
-%global stapinstall powerpc
%endif
%ifarch %{ppc64le}
%global archinstall ppc64le
-%global stapinstall powerpc
%endif
%ifarch %{ix86}
%global archinstall i386
-%global stapinstall i386
%endif
%ifarch ia64
%global archinstall ia64
-%global stapinstall ia64
%endif
%ifarch s390
%global archinstall s390
-%global stapinstall s390
%endif
%ifarch s390x
%global archinstall s390x
-%global stapinstall s390
%endif
%ifarch %{arm}
%global archinstall arm
-%global stapinstall arm
%endif
%ifarch %{aarch64}
%global archinstall aarch64
-%global stapinstall arm64
%endif
# 32 bit sparc, optimized for v9
%ifarch sparcv9
%global archinstall sparc
-%global stapinstall %{_build_cpu}
%endif
# 64 bit sparc
%ifarch sparc64
%global archinstall sparcv9
-%global stapinstall %{_build_cpu}
%endif
%ifnarch %{jit_arches}
%global archinstall %{_arch}
%endif
+
+
%ifarch %{jit_arches}
%global with_systemtap 1
%else
%global with_systemtap 0
%endif
+# New Version-String scheme-style defines
+%global majorver 8
+
%ifarch %{ix86} x86_64
%global with_openjfx_binding 1
%global openjfx_path %{_jvmdir}/openjfx
@@ -179,15 +179,10 @@
%global with_openjfx_binding 0
%endif
-# Convert an absolute path to a relative path. Each symbolic link is
-# specified relative to the directory in which it is installed so that
-# it will resolve properly within chrooted installations.
-%global script 'use File::Spec; print File::Spec->abs2rel($ARGV[0], $ARGV[1])'
-%global abs2rel %{__perl} -e %{script}
-
-
# Standard JPackage naming and versioning defines.
%global origin openjdk
+%global origin_nice OpenJDK
+%global top_level_dir_name %{origin}
# note, following three variables are sedded from update_sources if used correctly. Hardcode them rather there.
%global project aarch64-port
%global repo jdk8u
@@ -201,17 +196,19 @@
# priority must be 7 digits in total. The expression is workarounding tip
%global priority %(TIP=1800%{updatever}; echo ${TIP/tip/999})
-%global javaver 1.8.0
+%global javaver 1.%{majorver}.0
+%global systemtap_javaver 9
# parametrized macros are order-sensitive
-%global fullversion %{name}-%{version}-%{release}
-#images stub
-%global j2sdkimage j2sdk-image
+%global compatiblename %{name}
+%global fullversion %{compatiblename}-%{version}-%{release}
+# images stub
+%global jdkimage j2sdk-image
# output dir stub
%define buildoutputdir() %{expand:openjdk/build/jdk8.build%{?1}}
-#we can copy the javadoc to not arched dir, or made it not noarch
+# we can copy the javadoc to not arched dir, or make it not noarch
%define uniquejavadocdir() %{expand:%{fullversion}%{?1}}
-#main id and dir of this jdk
+# main id and dir of this jdk
%define uniquesuffix() %{expand:%{fullversion}.%{_arch}%{?1}}
# Standard JPackage directories and symbolic links.
@@ -234,10 +231,11 @@
# for the primary arch for now). Systemtap uses the machine name
# aka build_cpu as architecture specific directory name.
%global tapsetroot /usr/share/systemtap
-%global tapsetdir %{tapsetroot}/tapset/%{stapinstall}
+%global tapsetdirttapset %{tapsetroot}/tapset/
+%global tapsetdir %{tapsetdirttapset}/%{_build_cpu}
%endif
-# not-duplicated scriplets for normal/debug packages
+# not-duplicated scriptlets for normal/debug packages
%global update_desktop_icons /usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
@@ -252,7 +250,7 @@ exit 0
%ifarch %{jit_arches}
# MetaspaceShared::generate_vtable_methods not implemented for PPC JIT
%ifnarch %{power64}
-#see https://bugzilla.redhat.com/show_bug.cgi?id=513605
+# see https://bugzilla.redhat.com/show_bug.cgi?id=513605
%{jrebindir -- %{?1}}/java -Xshare:dump >/dev/null 2>/dev/null
%endif
%endif
@@ -508,7 +506,7 @@ exit 0
}
%define files_jre() %{expand:
-%{_datadir}/icons/hicolor/*x*/apps/java-%{javaver}.png
+%{_datadir}/icons/hicolor/*x*/apps/java-%{javaver}-%{origin}.png
%{_datadir}/applications/*policytool%{?1}.desktop
%{_jvmdir}/%{sdkdir -- %{?1}}/jre/lib/%{archinstall}/libjsoundalsa.so
%{_jvmdir}/%{sdkdir -- %{?1}}/jre/lib/%{archinstall}/libsplashscreen.so
@@ -522,12 +520,11 @@ exit 0
%defattr(-,root,root,-)
%dir %{_sysconfdir}/.java/.systemPrefs
%dir %{_sysconfdir}/.java
-%license %{buildoutputdir -- %{?1}}/images/%{j2sdkimage}/jre/ASSEMBLY_EXCEPTION
-%license %{buildoutputdir -- %{?1}}/images/%{j2sdkimage}/jre/LICENSE
-%license %{buildoutputdir -- %{?1}}/images/%{j2sdkimage}/jre/THIRD_PARTY_README
+%license %{buildoutputdir -- %{?1}}/images/%{jdkimage}/jre/ASSEMBLY_EXCEPTION
+%license %{buildoutputdir -- %{?1}}/images/%{jdkimage}/jre/LICENSE
+%license %{buildoutputdir -- %{?1}}/images/%{jdkimage}/jre/THIRD_PARTY_README
%dir %{_jvmdir}/%{sdkdir -- %{?1}}
%{_jvmdir}/%{jrelnk -- %{?1}}
-%{_jvmprivdir}/*
%dir %{_jvmdir}/%{jredir -- %{?1}}/lib/security
%{_jvmdir}/%{jredir -- %{?1}}/lib/security/cacerts
%dir %{_jvmdir}/%{jredir -- %{?1}}
@@ -633,7 +630,17 @@ exit 0
%{_jvmdir}/%{jredir -- %{?1}}/lib/management-agent.jar
%{_jvmdir}/%{jredir -- %{?1}}/lib/management/*
%{_jvmdir}/%{jredir -- %{?1}}/lib/cmm/*
-%{_jvmdir}/%{jredir -- %{?1}}/lib/ext/*
+%{_jvmdir}/%{jredir -- %{?1}}/lib/ext/cldrdata.jar
+%{_jvmdir}/%{jredir -- %{?1}}/lib/ext/dnsns.jar
+%{_jvmdir}/%{jredir -- %{?1}}/lib/ext/jaccess.jar
+%{_jvmdir}/%{jredir -- %{?1}}/lib/ext/localedata.jar
+%{_jvmdir}/%{jredir -- %{?1}}/lib/ext/meta-index
+%{_jvmdir}/%{jredir -- %{?1}}/lib/ext/nashorn.jar
+%{_jvmdir}/%{jredir -- %{?1}}/lib/ext/sunec.jar
+%{_jvmdir}/%{jredir -- %{?1}}/lib/ext/sunjce_provider.jar
+%{_jvmdir}/%{jredir -- %{?1}}/lib/ext/sunpkcs11.jar
+%{_jvmdir}/%{jredir -- %{?1}}/lib/ext/zipfs.jar
+
%dir %{_jvmdir}/%{jredir -- %{?1}}/lib/images
%dir %{_jvmdir}/%{jredir -- %{?1}}/lib/images/cursors
%dir %{_jvmdir}/%{jredir -- %{?1}}/lib/management
@@ -643,9 +650,9 @@ exit 0
%define files_devel() %{expand:
%defattr(-,root,root,-)
-%license %{buildoutputdir -- %{?1}}/images/%{j2sdkimage}/ASSEMBLY_EXCEPTION
-%license %{buildoutputdir -- %{?1}}/images/%{j2sdkimage}/LICENSE
-%license %{buildoutputdir -- %{?1}}/images/%{j2sdkimage}/THIRD_PARTY_README
+%license %{buildoutputdir -- %{?1}}/images/%{jdkimage}/ASSEMBLY_EXCEPTION
+%license %{buildoutputdir -- %{?1}}/images/%{jdkimage}/LICENSE
+%license %{buildoutputdir -- %{?1}}/images/%{jdkimage}/THIRD_PARTY_README
%dir %{_jvmdir}/%{sdkdir -- %{?1}}/bin
%dir %{_jvmdir}/%{sdkdir -- %{?1}}/include
%dir %{_jvmdir}/%{sdkdir -- %{?1}}/lib
@@ -693,6 +700,9 @@ exit 0
%{_jvmdir}/%{sdkdir -- %{?1}}/include/*
%{_jvmdir}/%{sdkdir -- %{?1}}/lib/%{archinstall}
%{_jvmdir}/%{sdkdir -- %{?1}}/lib/ct.sym
+%if %{with_systemtap}
+%{_jvmdir}/%{sdkdir -- %{?1}}/tapset
+%endif
%{_jvmdir}/%{sdkdir -- %{?1}}/lib/ir.idl
%{_jvmdir}/%{sdkdir -- %{?1}}/lib/jconsole.jar
%{_jvmdir}/%{sdkdir -- %{?1}}/lib/orb.idl
@@ -734,34 +744,33 @@ exit 0
%{_mandir}/man1/xjc-%{uniquesuffix -- %{?1}}.1*
%if %{with_systemtap}
%dir %{tapsetroot}
+%dir %{tapsetdirttapset}
%dir %{tapsetdir}
-%{tapsetdir}/*%{version}-%{release}.%{_arch}%{?1}.stp
-%dir %{_jvmdir}/%{sdkdir -- %{?1}}/tapset
-%{_jvmdir}/%{sdkdir -- %{?1}}/tapset/*.stp
+%{tapsetdir}/*%{_arch}%{?1}.stp
%endif
}
%define files_demo() %{expand:
%defattr(-,root,root,-)
-%license %{buildoutputdir -- %{?1}}/images/%{j2sdkimage}/jre/LICENSE
+%license %{buildoutputdir -- %{?1}}/images/%{jdkimage}/jre/LICENSE
}
%define files_src() %{expand:
%defattr(-,root,root,-)
-%doc README.src
+%doc README.md
%{_jvmdir}/%{sdkdir -- %{?1}}/src.zip
}
%define files_javadoc() %{expand:
%defattr(-,root,root,-)
%doc %{_javadocdir}/%{uniquejavadocdir -- %{?1}}
-%license %{buildoutputdir -- %{?1}}/images/%{j2sdkimage}/jre/LICENSE
+%license %{buildoutputdir -- %{?1}}/images/%{jdkimage}/jre/LICENSE
}
%define files_javadoc_zip() %{expand:
%defattr(-,root,root,-)
%doc %{_javadocdir}/%{uniquejavadocdir -- %{?1}}.zip
-%license %{buildoutputdir -- %{?1}}/images/%{j2sdkimage}/jre/LICENSE
+%license %{buildoutputdir -- %{?1}}/images/%{jdkimage}/jre/LICENSE
}
%define files_accessibility() %{expand:
@@ -770,7 +779,7 @@ exit 0
%{_jvmdir}/%{jredir -- %{?1}}/lib/accessibility.properties
}
-# not-duplicated requires/provides/obsolate for normal/debug packages
+# not-duplicated requires/provides/obsoletes for normal/debug packages
%define java_rpo() %{expand:
Requires: fontconfig%{?_isa}
Requires: xorg-x11-fonts-Type1
@@ -779,97 +788,82 @@ Requires: xorg-x11-fonts-Type1
Requires: %{name}-headless%{?1}%{?_isa} = %{epoch}:%{version}-%{release}
OrderWithRequires: %{name}-headless%{?1}%{?_isa} = %{epoch}:%{version}-%{release}
+Provides: java-%{javaver}-%{origin} = %{epoch}:%{version}-%{release}
-# Standard JPackage base provides.
-Provides: jre-%{javaver}-%{origin}%{?1} = %{epoch}:%{version}-%{release}
+# Standard JPackage base provides
+Provides: jre = %{javaver}%{?1}
Provides: jre-%{origin}%{?1} = %{epoch}:%{version}-%{release}
Provides: jre-%{javaver}%{?1} = %{epoch}:%{version}-%{release}
+Provides: jre-%{javaver}-%{origin}%{?1} = %{epoch}:%{version}-%{release}
Provides: java-%{javaver}%{?1} = %{epoch}:%{version}-%{release}
-Provides: jre = %{javaver}%{?1}
Provides: java-%{origin}%{?1} = %{epoch}:%{version}-%{release}
Provides: java%{?1} = %{epoch}:%{javaver}
-# Standard JPackage extensions provides.
-Provides: java-fonts%{?1} = %{epoch}:%{version}
-
-Obsoletes: java-1.7.0-openjdk%{?1}
-Obsoletes: java-1.5.0-gcj%{?1}
-Obsoletes: sinjdoc
}
%define java_headless_rpo() %{expand:
-# Require /etc/pki/java/cacerts.
+# Require /etc/pki/java/cacerts
Requires: ca-certificates
# Require javapackages-filesystem for ownership of /usr/lib/jvm/
Requires: javapackages-filesystem
-# Require zoneinfo data provided by tzdata-java subpackage.
+# Require zoneinfo data provided by tzdata-java sub-package
Requires: tzdata-java >= 2015d
# libsctp.so.1 is being `dlopen`ed on demand
Requires: lksctp-tools%{?_isa}
# there is a need to depend on the exact version of NSS
Requires: nss%{?_isa} %{NSS_BUILDTIME_VERSION}
Requires: nss-softokn%{?_isa} %{NSSSOFTOKN_BUILDTIME_VERSION}
-# tool to copy jdk's configs - should be Recommends only, but then only dnf/yum eforce it, not rpm transaction and so no configs are persisted when pure rpm -u is run. I t may be consiedered as regression
-Requires: copy-jdk-configs >= 3.3
+# tool to copy jdk's configs - should be Recommends only, but then only dnf/yum enforce it,
+# not rpm transaction and so no configs are persisted when pure rpm -u is run. It may be
+# considered as regression
+Requires: copy-jdk-configs >= 3.3
OrderWithRequires: copy-jdk-configs
-# Post requires alternatives to install tool alternatives.
+# Post requires alternatives to install tool alternatives
Requires(post): %{_sbindir}/alternatives
# in version 1.7 and higher for --family switch
Requires(post): chkconfig >= 1.7
-# Postun requires alternatives to uninstall tool alternatives.
+# Postun requires alternatives to uninstall tool alternatives
Requires(postun): %{_sbindir}/alternatives
# in version 1.7 and higher for --family switch
Requires(postun): chkconfig >= 1.7
-# Standard JPackage base provides.
+# Standard JPackage base provides
+Provides: jre-headless%{?1} = %{epoch}:%{javaver}
Provides: jre-%{javaver}-%{origin}-headless%{?1} = %{epoch}:%{version}-%{release}
Provides: jre-%{origin}-headless%{?1} = %{epoch}:%{version}-%{release}
Provides: jre-%{javaver}-headless%{?1} = %{epoch}:%{version}-%{release}
+Provides: java-%{javaver}-%{origin}-headless%{?1} = %{epoch}:%{version}-%{release}
Provides: java-%{javaver}-headless%{?1} = %{epoch}:%{version}-%{release}
-Provides: jre-headless%{?1} = %{epoch}:%{javaver}
Provides: java-%{origin}-headless%{?1} = %{epoch}:%{version}-%{release}
Provides: java-headless%{?1} = %{epoch}:%{javaver}
-# Standard JPackage extensions provides.
-Provides: jndi%{?1} = %{epoch}:%{version}
-Provides: jndi-ldap%{?1} = %{epoch}:%{version}
-Provides: jndi-cos%{?1} = %{epoch}:%{version}
-Provides: jndi-rmi%{?1} = %{epoch}:%{version}
-Provides: jndi-dns%{?1} = %{epoch}:%{version}
-Provides: jaas%{?1} = %{epoch}:%{version}
-Provides: jsse%{?1} = %{epoch}:%{version}
-Provides: jce%{?1} = %{epoch}:%{version}
-Provides: jdbc-stdext%{?1} = 4.1
-Provides: java-sasl%{?1} = %{epoch}:%{version}
-
-#https://bugzilla.redhat.com/show_bug.cgi?id=1312019
+
+# https://bugzilla.redhat.com/show_bug.cgi?id=1312019
Provides: /usr/bin/jjs
-Obsoletes: java-1.7.0-openjdk-headless%{?1}
}
%define java_devel_rpo() %{expand:
-# Require base package.
+# Requires base package
Requires: %{name}%{?1}%{?_isa} = %{epoch}:%{version}-%{release}
OrderWithRequires: %{name}-headless%{?1}%{?_isa} = %{epoch}:%{version}-%{release}
-# Post requires alternatives to install tool alternatives.
+# Post requires alternatives to install tool alternatives
Requires(post): %{_sbindir}/alternatives
# in version 1.7 and higher for --family switch
Requires(post): chkconfig >= 1.7
-# Postun requires alternatives to uninstall tool alternatives.
+# Postun requires alternatives to uninstall tool alternatives
Requires(postun): %{_sbindir}/alternatives
# in version 1.7 and higher for --family switch
Requires(postun): chkconfig >= 1.7
-# Standard JPackage devel provides.
+# Standard JPackage devel provides
Provides: java-sdk-%{javaver}-%{origin}%{?1} = %{epoch}:%{version}
Provides: java-sdk-%{javaver}%{?1} = %{epoch}:%{version}
Provides: java-sdk-%{origin}%{?1} = %{epoch}:%{version}
Provides: java-sdk%{?1} = %{epoch}:%{javaver}
Provides: java-%{javaver}-devel%{?1} = %{epoch}:%{version}
+Provides: java-%{javaver}-%{origin}-devel%{?1} = %{epoch}:%{version}
Provides: java-devel-%{origin}%{?1} = %{epoch}:%{version}
Provides: java-devel%{?1} = %{epoch}:%{javaver}
-Obsoletes: java-1.7.0-openjdk-devel%{?1}
-Obsoletes: java-1.5.0-gcj-devel%{?1}
}
@@ -877,39 +871,36 @@ Obsoletes: java-1.5.0-gcj-devel%{?1}
Requires: %{name}%{?1}%{?_isa} = %{epoch}:%{version}-%{release}
OrderWithRequires: %{name}-headless%{?1}%{?_isa} = %{epoch}:%{version}-%{release}
-Provides: java-%{javaver}-%{origin}-demo = %{epoch}:%{version}-%{release}
+Provides: java-demo%{?1} = %{epoch}:%{version}-%{release}
+Provides: java-%{javaver}-demo%{?1} = %{epoch}:%{version}-%{release}
+Provides: java-%{javaver}-%{origin}-demo%{?1} = %{epoch}:%{version}-%{release}
-Obsoletes: java-1.7.0-openjdk-demo%{?1}
}
%define java_javadoc_rpo() %{expand:
OrderWithRequires: %{name}-headless%{?1}%{?_isa} = %{epoch}:%{version}-%{release}
-# Post requires alternatives to install javadoc alternative.
+# Post requires alternatives to install javadoc alternative
Requires(post): %{_sbindir}/alternatives
# in version 1.7 and higher for --family switch
Requires(post): chkconfig >= 1.7
-# Postun requires alternatives to uninstall javadoc alternative.
+# Postun requires alternatives to uninstall javadoc alternative
Requires(postun): %{_sbindir}/alternatives
# in version 1.7 and higher for --family switch
Requires(postun): chkconfig >= 1.7
-# Standard JPackage javadoc provides.
+# Standard JPackage javadoc provides
Provides: java-javadoc%{?1} = %{epoch}:%{version}-%{release}
Provides: java-%{javaver}-javadoc%{?1} = %{epoch}:%{version}-%{release}
-Provides: java-%{javaver}-%{origin}-javadoc = %{epoch}:%{version}-%{release}
-
-Obsoletes: java-1.7.0-openjdk-javadoc%{?1}
-
+Provides: java-%{javaver}-%{origin}-javadoc%{?1} = %{epoch}:%{version}-%{release}
}
%define java_src_rpo() %{expand:
Requires: %{name}-headless%{?1}%{?_isa} = %{epoch}:%{version}-%{release}
-# Standard JPackage javadoc provides.
+# Standard JPackage sources provides
Provides: java-src%{?1} = %{epoch}:%{version}-%{release}
Provides: java-%{javaver}-src%{?1} = %{epoch}:%{version}-%{release}
-Provides: java-%{javaver}-%{origin}-src = %{epoch}:%{version}-%{release}
-Obsoletes: java-1.7.0-openjdk-src%{?1}
+Provides: java-%{javaver}-%{origin}-src%{?1} = %{epoch}:%{version}-%{release}
}
%define java_accessibility_rpo() %{expand:
@@ -917,29 +908,30 @@ Requires: java-atk-wrapper%{?_isa}
Requires: %{name}%{?1}%{?_isa} = %{epoch}:%{version}-%{release}
OrderWithRequires: %{name}-headless%{?1}%{?_isa} = %{epoch}:%{version}-%{release}
+Provides: java-accessibility = %{epoch}:%{version}-%{release}
+Provides: java-%{javaver}-accessibility = %{epoch}:%{version}-%{release}
Provides: java-%{javaver}-%{origin}-accessibility = %{epoch}:%{version}-%{release}
-Obsoletes: java-1.7.0-openjdk-accessibility%{?1}
}
-# Prevent brp-java-repack-jars from being run.
+# Prevent brp-java-repack-jars from being run
%global __jar_repack 0
Name: java-%{javaver}-%{origin}
Version: %{javaver}.%{updatever}
-Release: 1.%{buildver}%{?dist}
-# java-1.5.0-ibm from jpackage.org set Epoch to 1 for unknown reasons,
-# and this change was brought into RHEL-4. java-1.5.0-ibm packages
-# also included the epoch in their virtual provides. This created a
+Release: 2.%{buildver}%{?dist}
+# java-1.5.0-ibm from jpackage.org set Epoch to 1 for unknown reasons
+# and this change was brought into RHEL-4. java-1.5.0-ibm packages
+# also included the epoch in their virtual provides. This created a
# situation where in-the-wild java-1.5.0-ibm packages provided "java =
-# 1:1.5.0". In RPM terms, "1.6.0 < 1:1.5.0" since 1.6.0 is
-# interpreted as 0:1.6.0. So the "java >= 1.6.0" requirement would be
-# satisfied by the 1:1.5.0 packages. Thus we need to set the epoch in
+# 1:1.5.0". In RPM terms, "1.6.0 < 1:1.5.0" since 1.6.0 is
+# interpreted as 0:1.6.0. So the "java >= 1.6.0" requirement would be
+# satisfied by the 1:1.5.0 packages. Thus we need to set the epoch in
# JDK package >= 1.6.0 to 1, and packages referring to JDK virtual
# provides >= 1.6.0 must specify the epoch, "java >= 1:1.6.0".
Epoch: 1
-Summary: OpenJDK Runtime Environment
+Summary: %{origin_nice} Runtime Environment %{majorver}
Group: Development/Languages
# HotSpot code is licensed under GPLv2
@@ -966,15 +958,15 @@ Source0: %{project}-%{repo}-%{revision}.tar.xz
Source1: aarch64-port-jdk8u-shenandoah-aarch64-shenandoah-jdk8u172-b11--shenandoah-merge-2018-05-15.tar.xz
# Custom README for -src subpackage
-Source2: README.src
+Source2: README.md
# Use 'generate_tarballs.sh' to generate the following tarballs
-# They are based on code contained in the IcedTea7 project.
+# They are based on code contained in the IcedTea7 project
-# Systemtap tapsets. Zipped up to keep it small.
+# Systemtap tapsets. Zipped up to keep it small
Source8: systemtap-tapset-3.6.0pre02.tar.xz
-# Desktop files. Adapated from IcedTea.
+# Desktop files. Adapted from IcedTea
Source9: jconsole.desktop.in
Source10: policytool.desktop.in
@@ -996,7 +988,11 @@ Source20: repackReproduciblePolycies.sh
Source100: config.guess
Source101: config.sub
+############################################
+#
# RPM/distribution specific patches
+#
+############################################
# Accessibility patches
# Ignore AWTError when assistive technologies are loaded
@@ -1004,7 +1000,11 @@ Patch1: %{name}-accessible-toolkit.patch
# Restrict access to java-atk-wrapper classes
Patch3: java-atk-wrapper-security.patch
+#############################################
+#
# Upstreamable patches
+#
+#############################################
# PR2737: Allow multiple initialization of PKCS11 libraries
Patch5: multiple-pkcs11-library-init.patch
# PR2095, RH1163501: 2048-bit DH upper bound too small for Fedora infrastructure (sync with IcedTea 2.x)
@@ -1039,7 +1039,11 @@ Patch528: pr3083-rh1346460.patch
# linking with unresolved symbols.
Patch529: rhbz_1538767_fix_linking.patch
+#############################################
+#
# Upstreamable debugging patches
+#
+#############################################
# Patches 204 and 205 stop the build adding .gnu_debuglink sections to unstripped files
Patch204: hotspot-remove-debuglink.patch
Patch205: dont-add-unnecessary-debug-links.patch
@@ -1053,8 +1057,14 @@ Patch100: %{name}-s390-java-opts.patch
Patch102: %{name}-size_t.patch
# Use "%z" for size_t on s390 as size_t != intptr_t
Patch103: s390-size_t_format_flags.patch
+# Fix more cases of missing return statements on AArch64
+Patch104: pr3458-rh1540242.patch
+#############################################
+#
# Patches which need backporting to 8u
+#
+#############################################
# S8073139, RH1191652; fix name of ppc64le architecture
Patch601: %{name}-rh1191652-root.patch
Patch602: %{name}-rh1191652-jdk.patch
@@ -1083,14 +1093,23 @@ Patch560: 8188030-pr3459-rh1484079.patch
# 8197429, PR3456, RH153662{2,3}: 32 bit java app started via JNI crashes with larger stack sizes
Patch561: 8197429-pr3456-rh1536622.patch
+#############################################
+#
# Patches ineligible for 8u
+#
+#############################################
# 8043805: Allow using a system-installed libjpeg
Patch201: system-libjpeg.patch
Patch210: suse_linuxfilestore.patch
# custom securities
Patch300: PR3183.patch
+#############################################
+#
# Local fixes
+#
+#############################################
+
# PR1834, RH1022017: Reduce curves reported by SSL to those in NSS
Patch525: pr1834-rh1022017.patch
# Turn on AssumeMP by default on RHEL systems
@@ -1098,8 +1117,20 @@ Patch534: always_assumemp.patch
# PR2888: OpenJDK should check for system cacerts database (e.g. /etc/pki/java/cacerts)
Patch539: pr2888.patch
+#############################################
+#
+# Shenandoah fixes
+#
+#############################################
+# PR3573: Fix TCK crash with Shenandoah
+Patch700: pr3573.patch
+
+#############################################
+#
# Non-OpenJDK fixes
Patch1000: enableCommentedOutSystemNss.patch
+#
+#############################################
BuildRequires: autoconf
BuildRequires: automake
@@ -1107,7 +1138,8 @@ BuildRequires: alsa-lib-devel
BuildRequires: binutils
BuildRequires: cups-devel
BuildRequires: desktop-file-utils
-BuildRequires: elfutils
+# elfutils only are ok for build without AOT
+BuildRequires: elfutils-devel
BuildRequires: fontconfig
BuildRequires: freetype-devel
BuildRequires: giflib-devel
@@ -1135,7 +1167,7 @@ BuildRequires: java-1.7.0-openjdk-devel >= 1.7.0.151-2.6.11.3
%else
BuildRequires: java-1.8.0-openjdk-devel
%endif
-# Zero-assembler build requirement.
+# Zero-assembler build requirement
%ifnarch %{jit_arches}
BuildRequires: libffi-devel
%endif
@@ -1149,118 +1181,118 @@ BuildRequires: nss-softokn-freebl-devel >= 3.16.1
BuildRequires: systemtap-sdt-devel
%endif
-# this is built always, also during debug-only build
-# when it is built in debug-only, then this package is just placeholder
+# this is always built, also during debug-only build
+# when it is built in debug-only this package is just placeholder
%{java_rpo %{nil}}
%description
-The OpenJDK runtime environment.
+The %{origin_nice} runtime environment.
%if %{include_debug_build}
-%package debug
-Summary: OpenJDK Runtime Environment %{debug_on}
+%package slowdebug
+Summary: %{origin_nice} Runtime Environment %{majorver} %{debug_on}
Group: Development/Languages
%{java_rpo -- %{debug_suffix_unquoted}}
-%description debug
-The OpenJDK runtime environment.
+%description slowdebug
+The %{origin_nice} runtime environment.
%{debug_warning}
%endif
%if %{include_normal_build}
%package headless
-Summary: OpenJDK Runtime Environment
+Summary: %{origin_nice} Headless Runtime Environment %{majorver}
Group: Development/Languages
%{java_headless_rpo %{nil}}
%description headless
-The OpenJDK runtime environment without audio and video support.
+The %{origin_nice} runtime environment %{majorver} without audio and video support.
%endif
%if %{include_debug_build}
-%package headless-debug
-Summary: OpenJDK Runtime Environment %{debug_on}
+%package headless-slowdebug
+Summary: %{origin_nice} Runtime Environment %{debug_on}
Group: Development/Languages
%{java_headless_rpo -- %{debug_suffix_unquoted}}
-%description headless-debug
-The OpenJDK runtime environment without audio and video support.
+%description headless-slowdebug
+The %{origin_nice} runtime environment %{majorver} without audio and video support.
%{debug_warning}
%endif
%if %{include_normal_build}
%package devel
-Summary: OpenJDK Development Environment
+Summary: %{origin_nice} Development Environment %{majorver}
Group: Development/Tools
%{java_devel_rpo %{nil}}
%description devel
-The OpenJDK development tools.
+The %{origin_nice} development tools %{majorver}.
%endif
%if %{include_debug_build}
-%package devel-debug
-Summary: OpenJDK Development Environment %{debug_on}
+%package devel-slowdebug
+Summary: %{origin_nice} Development Environment %{majorver} %{debug_on}
Group: Development/Tools
%{java_devel_rpo -- %{debug_suffix_unquoted}}
-%description devel-debug
-The OpenJDK development tools.
+%description devel-slowdebug
+The %{origin_nice} development tools %{majorver}.
%{debug_warning}
%endif
%if %{include_normal_build}
%package demo
-Summary: OpenJDK Demos
+Summary: %{origin_nice} Demos %{majorver}
Group: Development/Languages
%{java_demo_rpo %{nil}}
%description demo
-The OpenJDK demos.
+The %{origin_nice} demos %{majorver}.
%endif
%if %{include_debug_build}
-%package demo-debug
-Summary: OpenJDK Demos %{debug_on}
+%package demo-slowdebug
+Summary: %{origin_nice} Demos %{majorver} %{debug_on}
Group: Development/Languages
%{java_demo_rpo -- %{debug_suffix_unquoted}}
-%description demo-debug
-The OpenJDK demos.
+%description demo-slowdebug
+The %{origin_nice} demos %{majorver}.
%{debug_warning}
%endif
%if %{include_normal_build}
%package src
-Summary: OpenJDK Source Bundle
+Summary: %{origin_nice} Source Bundle %{majorver}
Group: Development/Languages
%{java_src_rpo %{nil}}
%description src
-The OpenJDK source bundle.
+The java-%{origin}-src sub-package contains the complete %{origin_nice} %{majorver} class library source code for use by IDE indexers and debuggers.
%endif
%if %{include_debug_build}
-%package src-debug
-Summary: OpenJDK Source Bundle %{for_debug}
+%package src-slowdebug
+Summary: %{origin_nice} Source Bundle %{majorver} %{for_debug}
Group: Development/Languages
%{java_src_rpo -- %{debug_suffix_unquoted}}
-%description src-debug
-The OpenJDK source bundle %{for_debug}.
+%description src-slowdebug
+The java-%{origin}-src-slowdebug sub-package contains the complete %{origin_nice} %{majorver} class library source code for use by IDE indexers and debuggers. Debugging %{for_debug}.
%endif
%if %{include_normal_build}
%package javadoc
-Summary: OpenJDK API Documentation
+Summary: %{origin_nice} %{majorver} API documentation
Group: Documentation
Requires: javapackages-filesystem
BuildArch: noarch
@@ -1268,12 +1300,12 @@ BuildArch: noarch
%{java_javadoc_rpo %{nil}}
%description javadoc
-The OpenJDK API documentation.
+The %{origin_nice} %{majorver} API documentation.
%endif
%if %{include_normal_build}
%package javadoc-zip
-Summary: OpenJDK API Documentation compressed in single archive
+Summary: %{origin_nice} %{majorver} API documentation compressed in single archive
Group: Documentation
Requires: javapackages-filesystem
BuildArch: noarch
@@ -1281,60 +1313,60 @@ BuildArch: noarch
%{java_javadoc_rpo %{nil}}
%description javadoc-zip
-The OpenJDK API documentation compressed in single archive.
+The %{origin_nice} %{majorver} API documentation compressed in single archive.
%endif
%if %{include_debug_build}
-%package javadoc-debug
-Summary: OpenJDK API Documentation %{for_debug}
+%package javadoc-slowdebug
+Summary: %{origin_nice} %{majorver} API documentation %{for_debug}
Group: Documentation
Requires: javapackages-filesystem
BuildArch: noarch
%{java_javadoc_rpo -- %{debug_suffix_unquoted}}
-%description javadoc-debug
-The OpenJDK API documentation %{for_debug}.
+%description javadoc-slowdebug
+The %{origin_nice} %{majorver} API documentation %{for_debug}.
%endif
%if %{include_debug_build}
-%package javadoc-zip-debug
-Summary: OpenJDK API Documentation compressed in single archive %{for_debug}
+%package javadoc-zip-slowdebug
+Summary: %{origin_nice} %{majorver} API documentation compressed in single archive %{for_debug}
Group: Documentation
Requires: javapackages-filesystem
BuildArch: noarch
%{java_javadoc_rpo -- %{debug_suffix_unquoted}}
-%description javadoc-zip-debug
-The OpenJDK API documentation compressed in single archive %{for_debug}.
+%description javadoc-zip-slowdebug
+The %{origin_nice} %{majorver} API documentation compressed in single archive %{for_debug}.
%endif
%if %{include_normal_build}
%package accessibility
-Summary: OpenJDK accessibility connector
+Summary: %{origin_nice} %{majorver} accessibility connector
%{java_accessibility_rpo %{nil}}
%description accessibility
-Enables accessibility support in OpenJDK by using java-atk-wrapper. This allows
+Enables accessibility support in %{origin_nice} %{majorver} by using java-atk-wrapper. This allows
compatible at-spi2 based accessibility programs to work for AWT and Swing-based
programs.
-Please note, the java-atk-wrapper is still in beta, and OpenJDK itself is still
+Please note, the java-atk-wrapper is still in beta, and %{origin_nice} %{majorver} itself is still
being tuned to be working with accessibility features. There are known issues
with accessibility on, so please do not install this package unless you really
need to.
%endif
%if %{include_debug_build}
-%package accessibility-debug
-Summary: OpenJDK accessibility connector %{for_debug}
+%package accessibility-slowdebug
+Summary: %{origin_nice} %{majorver} accessibility connector %{for_debug}
%{java_accessibility_rpo -- %{debug_suffix_unquoted}}
-%description accessibility-debug
+%description accessibility-slowdebug
See normal java-%{version}-openjdk-accessibility description.
%endif
@@ -1389,7 +1421,7 @@ else
exit 12
fi
if [ %{include_debug_build} -eq 0 -a %{include_normal_build} -eq 0 ] ; then
- echo "you have disabled both include_debug_build and include_debug_build. no go."
+ echo "You have disabled both include_debug_build and include_debug_build. That is a no go."
exit 13
fi
%setup -q -c -n %{uniquesuffix ""} -T -a 0
@@ -1449,6 +1481,12 @@ sh %{SOURCE12}
%patch102
%patch103
+# AArch64 fixes
+%if %{use_shenandoah_hotspot}
+%else
+%patch104
+%endif
+
# ppc64le fixes
%patch603
%patch601
@@ -1479,9 +1517,9 @@ sh %{SOURCE12}
%patch538
%patch540
%patch560
-pushd openjdk/jdk
+pushd %{top_level_dir_name}/jdk
%patch529 -p1
-popd
+popd # openjdk
%patch561
# RPM-only fixes
@@ -1505,17 +1543,17 @@ cp -r tapset tapset%{debug_suffix}
for suffix in %{build_loop} ; do
for file in "tapset"$suffix/*.in; do
- OUTPUT_FILE=`echo $file | sed -e s:%{javaver}\.stp\.in$:%{version}-%{release}.%{_arch}.stp:g`
- sed -e s:@ABS_SERVER_LIBJVM_SO@:%{_jvmdir}/%{sdkdir -- $suffix}/jre/lib/%{archinstall}/server/libjvm.so:g $file > $file.1
+ OUTPUT_FILE=`echo $file | sed -e "s:%{systemtap_javaver}\.stp\.in$:%{version}-%{release}.%{_arch}.stp:g"`
+ sed -e "s:@ABS_SERVER_LIBJVM_SO@:%{_jvmdir}/%{sdkdir -- $suffix}/jre/lib/%{archinstall}/server/libjvm.so:g" $file > $file.1
# TODO find out which architectures other than i686 have a client vm
%ifarch %{ix86}
- sed -e s:@ABS_CLIENT_LIBJVM_SO@:%{_jvmdir}/%{sdkdir -- $suffix}/jre/lib/%{archinstall}/client/libjvm.so:g $file.1 > $OUTPUT_FILE
+ sed -e "s:@ABS_CLIENT_LIBJVM_SO@:%{_jvmdir}/%{sdkdir -- $suffix}/jre/lib/%{archinstall}/client/libjvm.so:g" $file.1 > $OUTPUT_FILE
%else
- sed -e '/@ABS_CLIENT_LIBJVM_SO@/d' $file.1 > $OUTPUT_FILE
+ sed -e "/@ABS_CLIENT_LIBJVM_SO@/d" $file.1 > $OUTPUT_FILE
%endif
- sed -i -e s:@ABS_JAVA_HOME_DIR@:%{_jvmdir}/%{sdkdir -- $suffix}:g $OUTPUT_FILE
- sed -i -e s:@INSTALL_ARCH_DIR@:%{archinstall}:g $OUTPUT_FILE
- sed -i -e s:@prefix@:%{_jvmdir}/%{sdkdir -- $suffix}/:g $OUTPUT_FILE
+ sed -i -e "s:@ABS_JAVA_HOME_DIR@:%{_jvmdir}/%{sdkdir -- $suffix}:g" $OUTPUT_FILE
+ sed -i -e "s:@INSTALL_ARCH_DIR@:%{archinstall}:g" $OUTPUT_FILE
+ sed -i -e "s:@prefix@:%{_jvmdir}/%{sdkdir -- $suffix}/:g" $OUTPUT_FILE
done
done
# systemtap tapsets ends
@@ -1528,14 +1566,16 @@ for file in %{SOURCE9} %{SOURCE10} ; do
EXT="${FILE##*.}"
NAME="${FILE%.*}"
OUTPUT_FILE=$NAME$suffix.$EXT
- sed -e s:#JAVA_HOME#:%{sdkbindir -- $suffix}:g $file > $OUTPUT_FILE
- sed -i -e s:#JRE_HOME#:%{jrebindir -- $suffix}:g $OUTPUT_FILE
- sed -i -e s:#ARCH#:%{version}-%{release}.%{_arch}$suffix:g $OUTPUT_FILE
+ sed -e "s:@JAVA_HOME@:%{sdkbindir -- $suffix}:g" $file > $OUTPUT_FILE
+ sed -i -e "s:@JRE_HOME@:%{jrebindir -- $suffix}:g" $OUTPUT_FILE
+ sed -i -e "s:@ARCH@:%{version}-%{release}.%{_arch}$suffix:g" $OUTPUT_FILE
+ sed -i -e "s:@JAVA_MAJOR_VERSION@:%{majorver}:g" $OUTPUT_FILE
+ sed -i -e "s:@JAVA_VENDOR@:%{origin}:g" $OUTPUT_FILE
done
done
# Setup nss.cfg
-sed -e s:@NSS_LIBDIR@:%{NSS_LIBDIR}:g %{SOURCE11} > nss.cfg
+sed -e "s:@NSS_LIBDIR@:%{NSS_LIBDIR}:g" %{SOURCE11} > nss.cfg
%build
@@ -1547,7 +1587,6 @@ export NUM_PROC=${NUM_PROC:-1}
[ ${NUM_PROC} -gt %{?_smp_ncpus_max} ] && export NUM_PROC=%{?_smp_ncpus_max}
%endif
-# Build IcedTea and OpenJDK.
%ifarch s390x sparc64 alpha %{power64} %{aarch64}
export ARCH_DATA_MODEL=64
%endif
@@ -1560,21 +1599,23 @@ export CFLAGS="$CFLAGS -mieee"
# Explicitly set the C++ standard as the default has changed on GCC >= 6
EXTRA_CFLAGS="%ourcppflags -std=gnu++98 -Wno-error -fno-delete-null-pointer-checks -fno-lifetime-dse"
EXTRA_CPP_FLAGS="%ourcppflags -std=gnu++98 -fno-delete-null-pointer-checks -fno-lifetime-dse"
+
%ifarch %{power64} ppc
# fix rpmlint warnings
EXTRA_CFLAGS="$EXTRA_CFLAGS -fno-strict-aliasing"
%endif
export EXTRA_CFLAGS
-(cd openjdk/common/autoconf
+(cd %{top_level_dir_name}/common/autoconf
bash ./autogen.sh
)
for suffix in %{build_loop} ; do
-if [ "$suffix" = "%{debug_suffix}" ] ; then
-debugbuild=%{debugbuild_parameter}
+if [ "x$suffix" = "x" ] ; then
+ debugbuild=release
else
-debugbuild=%{normalbuild_parameter}
+ # change --something to something
+ debugbuild=`echo $suffix | sed "s/-//g"`
fi
mkdir -p %{buildoutputdir -- $suffix}
@@ -1598,10 +1639,15 @@ bash ../../configure \
--with-libjpeg=system \
--with-giflib=system \
--with-libpng=system \
- --with-lcms=bundled \
+ --with-lcms=system \
--with-stdc++lib=dynamic \
+%ifarch %{ix86}
+ --with-extra-cxxflags="-mstackrealign $EXTRA_CPP_FLAGS" \
+ --with-extra-cflags="-mstackrealign $EXTRA_CFLAGS" \
+%else
--with-extra-cxxflags="$EXTRA_CPP_FLAGS" \
--with-extra-cflags="$EXTRA_CFLAGS" \
+%endif
--with-extra-ldflags="%{ourldflags}" \
--with-num-cores="$NUM_PROC"
@@ -1627,17 +1673,22 @@ make zip-docs
# the build (erroneously) removes read permissions from some jars
# this is a regression in OpenJDK 7 (our compiler):
# http://icedtea.classpath.org/bugzilla/show_bug.cgi?id=1437
-find images/%{j2sdkimage} -iname '*.jar' -exec chmod ugo+r {} \;
-chmod ugo+r images/%{j2sdkimage}/lib/ct.sym
+find images/%{jdkimage} -iname '*.jar' -exec chmod ugo+r {} \;
+chmod ugo+r images/%{jdkimage}/lib/ct.sym
# remove redundant *diz and *debuginfo files
-find images/%{j2sdkimage} -iname '*.diz' -exec rm {} \;
-find images/%{j2sdkimage} -iname '*.debuginfo' -exec rm {} \;
+find images/%{jdkimage} -iname '*.diz' -exec rm {} \;
+find images/%{jdkimage} -iname '*.debuginfo' -exec rm {} \;
+
+# Build screws up permissions on binaries
+# https://bugs.openjdk.java.net/browse/JDK-8173610
+find images/%{jdkimage} -iname '*.so' -exec chmod +x {} \;
+find images/%{jdkimage}/bin/ -exec chmod +x {} \;
popd >& /dev/null
# Install nss.cfg right away as we will be using the JRE above
-export JAVA_HOME=$(pwd)/%{buildoutputdir -- $suffix}/images/%{j2sdkimage}
+export JAVA_HOME=$(pwd)/%{buildoutputdir -- $suffix}/images/%{jdkimage}
# Install nss.cfg right away as we will be using the JRE above
install -m 644 nss.cfg $JAVA_HOME/jre/lib/security/
@@ -1646,7 +1697,7 @@ install -m 644 nss.cfg $JAVA_HOME/jre/lib/security/
rm $JAVA_HOME/jre/lib/tzdb.dat
ln -s %{_datadir}/javazi-1.8/tzdb.dat $JAVA_HOME/jre/lib/tzdb.dat
-#build cycles
+# build cycles
done
%check
@@ -1654,7 +1705,7 @@ done
# We test debug first as it will give better diagnostics on a crash
for suffix in %{rev_build_loop} ; do
-export JAVA_HOME=$(pwd)/%{buildoutputdir -- $suffix}/images/%{j2sdkimage}
+export JAVA_HOME=$(pwd)/%{buildoutputdir -- $suffix}/images/%{jdkimage}
# Check unlimited policy has been used
$JAVA_HOME/bin/javac -d . %{SOURCE13}
@@ -1672,14 +1723,14 @@ do
# All these tests rely on RPM failing the build if the exit code of any set
# of piped commands is non-zero.
- # Test for .debug_* sections in the shared object. This is the main test.
- # Stripped objects will not contain these.
+ # Test for .debug_* sections in the shared object. This is the main test
+ # Stripped objects will not contain these
eu-readelf -S "$lib" | grep "] .debug_"
test $(eu-readelf -S "$lib" | grep -E "\]\ .debug_(info|abbrev)" | wc --lines) == 2
- # Test FILE symbols. These will most likely be removed by anyting that
+ # Test FILE symbols. These will most likely be removed by anything that
# manipulates symbol tables because it's generally useless. So a nice test
- # that nothing has messed with symbols.
+ # that nothing has messed with symbols
old_IFS="$IFS"
IFS=$'\n'
for line in $(eu-readelf -s "$lib" | grep "00000000 0 FILE LOCAL DEFAULT")
@@ -1690,7 +1741,7 @@ do
done
IFS="$old_IFS"
- # If this is the JVM, look for javaCalls.(cpp|o) in FILEs, for extra sanity checking.
+ # If this is the JVM, look for javaCalls.(cpp|o) in FILEs, for extra sanity checking
if [ "`basename $lib`" = "libjvm.so" ]; then
eu-readelf -s "$lib" | \
grep -E "00000000 0 FILE LOCAL DEFAULT ABS javaCalls.(cpp|o)$"
@@ -1698,7 +1749,7 @@ do
# Test that there are no .gnu_debuglink sections pointing to another
# debuginfo file. There shouldn't be any debuginfo files, so the link makes
- # no sense either.
+ # no sense either
eu-readelf -S "$lib" | grep 'gnu'
if eu-readelf -S "$lib" | grep '] .gnu_debuglink' | grep PROGBITS; then
echo "bad .gnu_debuglink section."
@@ -1740,7 +1791,7 @@ $JAVA_HOME/bin/javap -l java.nio.ByteBuffer | grep "Compiled from"
$JAVA_HOME/bin/javap -l java.nio.ByteBuffer | grep LineNumberTable
$JAVA_HOME/bin/javap -l java.nio.ByteBuffer | grep LocalVariableTable
-#build cycles check
+# build cycles check
done
%install
@@ -1748,9 +1799,10 @@ STRIP_KEEP_SYMTAB=libjvm*
for suffix in %{build_loop} ; do
-pushd %{buildoutputdir -- $suffix}/images/%{j2sdkimage}
+# Install the jdk
+pushd %{buildoutputdir -- $suffix}/images/%{jdkimage}
-#install jsa directories so we can owe them
+# Install jsa directories so we can owe them
mkdir -p $RPM_BUILD_ROOT%{_jvmdir}/%{jredir -- $suffix}/lib/%{archinstall}/server/
mkdir -p $RPM_BUILD_ROOT%{_jvmdir}/%{jredir -- $suffix}/lib/%{archinstall}/client/
@@ -1761,7 +1813,7 @@ mkdir -p $RPM_BUILD_ROOT%{_jvmdir}/%{jredir -- $suffix}/lib/%{archinstall}/clien
cp -a jre/bin jre/lib $RPM_BUILD_ROOT%{_jvmdir}/%{jredir -- $suffix}
%if %{with_systemtap}
- # Install systemtap support files.
+ # Install systemtap support files
install -dm 755 $RPM_BUILD_ROOT%{_jvmdir}/%{sdkdir -- $suffix}/tapset
# note, that uniquesuffix is in BUILD dir in this case
cp -a $RPM_BUILD_DIR/%{uniquesuffix ""}/tapset$suffix/*.stp $RPM_BUILD_ROOT%{_jvmdir}/%{sdkdir -- $suffix}/tapset/
@@ -1769,28 +1821,20 @@ mkdir -p $RPM_BUILD_ROOT%{_jvmdir}/%{jredir -- $suffix}/lib/%{archinstall}/clien
tapsetFiles=`ls *.stp`
popd
install -d -m 755 $RPM_BUILD_ROOT%{tapsetdir}
- pushd $RPM_BUILD_ROOT%{tapsetdir}
- RELATIVE=$(%{abs2rel} %{_jvmdir}/%{sdkdir -- $suffix}/tapset %{tapsetdir})
- for name in $tapsetFiles ; do
- targetName=`echo $name | sed "s/.stp/$suffix.stp/"`
- ln -sf $RELATIVE/$name $targetName
- done
- popd
+ for name in $tapsetFiles ; do
+ targetName=`echo $name | sed "s/.stp/$suffix.stp/"`
+ ln -sf %{_jvmdir}/%{sdkdir -- $suffix}/tapset/$name $RPM_BUILD_ROOT%{tapsetdir}/$targetName
+ done
%endif
- # Remove empty cacerts database.
+ # Remove empty cacerts database
rm -f $RPM_BUILD_ROOT%{_jvmdir}/%{jredir -- $suffix}/lib/security/cacerts
- # Install cacerts symlink needed by some apps which hardcode the path.
+ # Install cacerts symlink needed by some apps which hardcode the path
pushd $RPM_BUILD_ROOT%{_jvmdir}/%{jredir -- $suffix}/lib/security
- RELATIVE=$(%{abs2rel} %{_sysconfdir}/pki/java \
- %{_jvmdir}/%{jredir -- $suffix}/lib/security)
- ln -sf $RELATIVE/cacerts .
+ ln -sf /etc/pki/java/cacerts .
popd
- # Install JCE policy symlinks.
- install -d -m 755 $RPM_BUILD_ROOT%{_jvmprivdir}/%{uniquesuffix -- $suffix}/jce/vanilla
-
- # Install versioned symlinks.
+ # Install versioned symlinks
pushd $RPM_BUILD_ROOT%{_jvmdir}
ln -sf %{jredir -- $suffix} %{jrelnk -- $suffix}
popd
@@ -1798,11 +1842,11 @@ mkdir -p $RPM_BUILD_ROOT%{_jvmdir}/%{jredir -- $suffix}/lib/%{archinstall}/clien
# Remove javaws man page
rm -f man/man1/javaws*
- # Install man pages.
+ # Install man pages
install -d -m 755 $RPM_BUILD_ROOT%{_mandir}/man1
for manpage in man/man1/*
do
- # Convert man pages to UTF8 encoding.
+ # Convert man pages to UTF8 encoding
iconv -f ISO_8859-1 -t UTF8 $manpage -o $manpage.tmp
mv -f $manpage.tmp $manpage
install -m 644 -p $manpage $RPM_BUILD_ROOT%{_mandir}/man1/$(basename \
@@ -1821,19 +1865,20 @@ mkdir -p $RPM_BUILD_ROOT%{_jvmdir}/%{jredir -- $suffix}/lib/%{archinstall}/clien
popd
-# Install Javadoc documentation.
+# Install Javadoc documentation
install -d -m 755 $RPM_BUILD_ROOT%{_javadocdir}
cp -a %{buildoutputdir -- $suffix}/docs $RPM_BUILD_ROOT%{_javadocdir}/%{uniquejavadocdir -- $suffix}
-cp -a %{buildoutputdir -- $suffix}/bundles/jdk-%{javaver}_%{updatever}$suffix-%{buildver}-docs.zip $RPM_BUILD_ROOT%{_javadocdir}/%{uniquejavadocdir -- $suffix}.zip
+built_doc_archive=`echo "jdk-%{javaver}_%{updatever}$suffix-%{buildver}-docs.zip" | sed s/slowdebug/debug/`
+cp -a %{buildoutputdir -- $suffix}/bundles/$built_doc_archive $RPM_BUILD_ROOT%{_javadocdir}/%{uniquejavadocdir -- $suffix}.zip
-# Install icons and menu entries.
+# Install icons and menu entries
for s in 16 24 32 48 ; do
install -D -p -m 644 \
openjdk/jdk/src/solaris/classes/sun/awt/X11/java-icon${s}.png \
- $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/${s}x${s}/apps/java-%{javaver}.png
+ $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/${s}x${s}/apps/java-%{javaver}-%{origin}.png
done
-# Install desktop files.
+# Install desktop files
install -d -m 755 $RPM_BUILD_ROOT%{_datadir}/{applications,pixmaps}
for e in jconsole$suffix policytool$suffix ; do
desktop-file-install --vendor=%{uniquesuffix -- $suffix} --mode=644 \
@@ -1844,7 +1889,7 @@ done
# See https://bugzilla.redhat.com/show_bug.cgi?id=741821
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/.java/.systemPrefs
-# FIXME: remove SONAME entries from demo DSOs. See
+# FIXME: remove SONAME entries from demo DSOs. See
# https://bugzilla.redhat.com/show_bug.cgi?id=436497
# Find non-documentation demo files.
@@ -1920,17 +1965,24 @@ bash %{SOURCE20} $RPM_BUILD_ROOT/%{_jvmdir}/%{jredir -- $suffix} %{javaver}
# https://bugzilla.redhat.com/show_bug.cgi?id=1183793
touch -t 201401010000 $RPM_BUILD_ROOT/%{_jvmdir}/%{jredir -- $suffix}/lib/security/java.security
+# stabilize permissions
+find $RPM_BUILD_ROOT/%{_jvmdir}/%{sdkdir -- $suffix}/ -name "*.so" -exec chmod 755 {} \; ;
+find $RPM_BUILD_ROOT/%{_jvmdir}/%{sdkdir -- $suffix}/ -type d -exec chmod 755 {} \; ;
+find $RPM_BUILD_ROOT/%{_jvmdir}/%{sdkdir -- $suffix}/ -name "ASSEMBLY_EXCEPTION" -exec chmod 644 {} \; ;
+find $RPM_BUILD_ROOT/%{_jvmdir}/%{sdkdir -- $suffix}/ -name "LICENSE" -exec chmod 644 {} \; ;
+find $RPM_BUILD_ROOT/%{_jvmdir}/%{sdkdir -- $suffix}/ -name "THIRD_PARTY_README" -exec chmod 644 {} \; ;
+
# end, dual install
done
-%if %{include_normal_build}
-# intentioanlly only for non-debug
+%if %{include_normal_build}
+# intentionally only for non-debug
%pretrans headless -p <lua>
-- see https://bugzilla.redhat.com/show_bug.cgi?id=1038092 for whole issue
-- see https://bugzilla.redhat.com/show_bug.cgi?id=1290388 for pretrans over pre
-- if copy-jdk-configs is in transaction, it installs in pretrans to temp
-- if copy_jdk_configs is in temp, then it means that copy-jdk-configs is in tranasction and so is
--- preferred over one in %%{_libexecdir}. If it is not in transaction, then depends
+-- preferred over one in %%{_libexecdir}. If it is not in transaction, then depends
-- whether copy-jdk-configs is installed or not. If so, then configs are copied
-- (copy_jdk_configs from %%{_libexecdir} used) or not copied at all
local posix = require "posix"
@@ -1947,7 +1999,7 @@ local stat2 = posix.stat(SOURCE2, "type");
print(SOURCE1 .." exists - copy-jdk-configs in transaction, using this one.")
end;
package.path = package.path .. ";" .. SOURCE1
-else
+else
if (stat2 ~= nil) then
if (debug) then
print(SOURCE2 .." exists - copy-jdk-configs alrady installed and NOT in transation. Using.")
@@ -1962,11 +2014,11 @@ else
return
end
end
--- run contetn of included file with fake args
+-- run content of included file with fake args
arg = {"--currentjvm", "%{uniquesuffix %{nil}}", "--jvmdir", "%{_jvmdir %{nil}}", "--origname", "%{name}", "--origjavaver", "%{javaver}", "--arch", "%{_arch}", "--temp", "%{rpm_state_dir}/%{name}.%{_arch}"}
require "copy_jdk_configs.lua"
-%post
+%post
%{post_script %{nil}}
%post headless
@@ -2003,45 +2055,45 @@ require "copy_jdk_configs.lua"
%{postun_javadoc_zip %{nil}}
%endif
-%if %{include_debug_build}
-%post debug
+%if %{include_debug_build}
+%post slowdebug
%{post_script -- %{debug_suffix_unquoted}}
-%post headless-debug
+%post headless-slowdebug
%{post_headless -- %{debug_suffix_unquoted}}
-%postun debug
+%postun slowdebug
%{postun_script -- %{debug_suffix_unquoted}}
-%postun headless-debug
+%postun headless-slowdebug
%{postun_headless -- %{debug_suffix_unquoted}}
-%posttrans debug
+%posttrans slowdebug
%{posttrans_script -- %{debug_suffix_unquoted}}
-%post devel-debug
+%post devel-slowdebug
%{post_devel -- %{debug_suffix_unquoted}}
-%postun devel-debug
+%postun devel-slowdebug
%{postun_devel -- %{debug_suffix_unquoted}}
-%posttrans devel-debug
+%posttrans devel-slowdebug
%{posttrans_devel -- %{debug_suffix_unquoted}}
-%post javadoc-debug
+%post javadoc-slowdebug
%{post_javadoc -- %{debug_suffix_unquoted}}
-%postun javadoc-debug
+%postun javadoc-slowdebug
%{postun_javadoc -- %{debug_suffix_unquoted}}
-%post javadoc-zip-debug
+%post javadoc-zip-slowdebug
%{post_javadoc_zip -- %{debug_suffix_unquoted}}
-%postun javadoc-zip-debug
+%postun javadoc-zip-slowdebug
%{postun_javadoc_zip -- %{debug_suffix_unquoted}}
%endif
-%if %{include_normal_build}
+%if %{include_normal_build}
%files
# main package builds always
%{files_jre %{nil}}
@@ -2051,10 +2103,10 @@ require "copy_jdk_configs.lua"
%endif
-%if %{include_normal_build}
+%if %{include_normal_build}
%files headless
-# important note, see https://bugzilla.redhat.com/show_bug.cgi?id=1038092 for whole issue
-# all config/norepalce files (and more) have to be declared in pretrans. See pretrans
+# important note, see https://bugzilla.redhat.com/show_bug.cgi?id=1038092 for whole issue
+# all config/noreplace files (and more) have to be declared in pretrans. See pretrans
%{files_jre_headless %{nil}}
%files devel
@@ -2069,6 +2121,10 @@ require "copy_jdk_configs.lua"
%files javadoc
%{files_javadoc %{nil}}
+# this puts huge file to /usr/share
+# unluckily ti is really a documentation file
+# and unluckily it really is archtecture-depndent, as ag aot and grail are now x86_64 only
+# same for debug variant
%files javadoc-zip
%{files_javadoc_zip %{nil}}
@@ -2082,39 +2138,52 @@ require "copy_jdk_configs.lua"
%endif
%endif
-%if %{include_debug_build}
-%files debug
+%if %{include_debug_build}
+%files slowdebug
%{files_jre -- %{debug_suffix_unquoted}}
-%files headless-debug
+%files headless-slowdebug
%{files_jre_headless -- %{debug_suffix_unquoted}}
-%files devel-debug
+%files devel-slowdebug
%{files_devel -- %{debug_suffix_unquoted}}
-%files demo-debug -f %{name}-demo.files-debug
+%files demo-slowdebug -f %{name}-demo.files-slowdebug
%{files_demo -- %{debug_suffix_unquoted}}
-%files src-debug
+%files src-slowdebug
%{files_src -- %{debug_suffix_unquoted}}
-%files javadoc-debug
+%files javadoc-slowdebug
%{files_javadoc -- %{debug_suffix_unquoted}}
-%files javadoc-zip-debug
+%files javadoc-zip-slowdebug
%{files_javadoc_zip -- %{debug_suffix_unquoted}}
-%files accessibility-debug
+%files accessibility-slowdebug
%{files_accessibility -- %{debug_suffix_unquoted}}
%if %{with_openjfx_binding}
-%files openjfx-debug -f %{name}-openjfx.files-debug
+%files openjfx-slowdebug -f %{name}-openjfx.files-slowdebug
-%files openjfx-devel-debug -f %{name}-openjfx-devel.files-debug
+%files openjfx-devel-slowdebug -f %{name}-openjfx-devel.files-slowdebug
%endif
%endif
%changelog
+* Wed Jun 06 2018 Jiri Vanek <jvanek(a)redhat.com> - 1:1.8.0.172-2.b11
+- quoted sed expressions, changed possibly confussing # by @
+- added vendor(origin) into icons
+- removed last trace of relative symlinks
+- added BuildRequires of javapackages-tools to fix build failure after Requires change to javapackages-filesystem
+- aligning with java-openjdk in fedora:
+- slowdebug instead simply debug subpackage
+- purged provides
+- many macros renamed
+- typos correction
+- bumped jstack (may be wrong)
+- fixed issue with atkwrapper wrongly palced broken symlink
+
* Wed Jun 06 2018 Jiri Vanek <jvanek(a)redhat.com> - 1:1.8.0.172-1.b11
- updated to u172-b11
- removed patches:
diff --git a/jconsole.desktop.in b/jconsole.desktop.in
index 82a5c4c..a8917c1 100644
--- a/jconsole.desktop.in
+++ b/jconsole.desktop.in
@@ -1,8 +1,8 @@
[Desktop Entry]
-Name=OpenJDK 8 Monitoring & Management Console #ARCH#
-Comment=Monitor and manage OpenJDK applications for #ARCH#
-Exec=#JAVA_HOME#/jconsole
-Icon=java-1.8.0
+Name=OpenJDK @JAVA_MAJOR_VERSION@ Monitoring & Management Console @ARCH@
+Comment=Monitor and manage OpenJDK @JAVA_MAJOR_VERSION@ applications for @ARCH@
+Exec=@JAVA_HOME@/jconsole
+Icon=java-@JAVA_MAJOR_VERSION@-@JAVA_VENDOR@
Terminal=false
Type=Application
StartupWMClass=sun-tools-jconsole-JConsole
diff --git a/policytool.desktop.in b/policytool.desktop.in
index d38b42d..e05969d 100644
--- a/policytool.desktop.in
+++ b/policytool.desktop.in
@@ -1,8 +1,8 @@
[Desktop Entry]
-Name=OpenJDK 8 Policy Tool #ARCH#
-Comment=Manage OpenJDK policy files #ARCH#
-Exec=#JRE_HOME#/policytool
-Icon=java-1.8.0
+Name=OpenJDK @JAVA_MAJOR_VERSION@ Policy Tool #ARCH#
+Comment=Manage OpenJDK @JAVA_MAJOR_VERSION@ policy files #ARCH#
+Exec=@JRE_HOME@/policytool
+Icon=java-@JAVA_MAJOR_VERSION@-@JAVA_VENDOR@
Terminal=false
Type=Application
StartupWMClass=sun-security-tools-PolicyTool
diff --git a/pr3458-rh1540242.patch b/pr3458-rh1540242.patch
new file mode 100644
index 0000000..2a1ce5e
--- /dev/null
+++ b/pr3458-rh1540242.patch
@@ -0,0 +1,23 @@
+diff --git a/src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp b/src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp
+--- openjdk/hotspot/src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp
++++ openjdk/hotspot/src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp
+@@ -698,6 +698,7 @@
+
+ extern "C" {
+ int SpinPause() {
++ return 0;
+ }
+
+ void _Copy_conjoint_jshorts_atomic(jshort* from, jshort* to, size_t count) {
+diff --git a/src/os_cpu/linux_zero/vm/os_linux_zero.cpp b/src/os_cpu/linux_zero/vm/os_linux_zero.cpp
+--- openjdk/hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.cpp
++++ openjdk/hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.cpp
+@@ -408,6 +408,7 @@
+
+ extern "C" {
+ int SpinPause() {
++ return 0;
+ }
+
+
+
diff --git a/sources b/sources
index 9544f7d..32c9800 100644
--- a/sources
+++ b/sources
@@ -1,3 +1,3 @@
-SHA512 (systemtap-tapset-3.6.0pre02.tar.xz) = d59858bbe9e927bdf47711e3c71c88f93567596aea3e1736b33b436a7a2cb38af25a9b4b4224ca513454b3f2d0371d14e753176c1810d9745a7e4af8edae7fb8
+SHA512 (systemtap-tapset-3.6.0pre02.tar.xz) = 848f42ef7ca751e723fd50e3a6da14c0965ad4da37ea3331568658e27497b7a7e4b9aad3dedd264ad0bb5566c37a92302b905f10258a4e2c89dc4ba609e55481
SHA512 (aarch64-port-jdk8u-aarch64-jdk8u172-b11.tar.xz) = 2c322d161fdc5feeaf80011698ac1bcf4311513f9dc7484cefea91a1eba1a1c5aaad024ce6a525995fe88adc30ef68100032eaaa4d00082f2310f676592d3790
SHA512 (aarch64-port-jdk8u-shenandoah-aarch64-shenandoah-jdk8u172-b11--shenandoah-merge-2018-05-15.tar.xz) = 7020590f7d618460ab3fc81513edfcd2452c222c15800a376628a864b6bbb611f890e66143a26011f9e4cc534e516047c2c573f7682e5b0f325425eeee05a280
5 years, 11 months
Architecture specific change in rpms/golang-github-gdamore-tcell.git
by githook-noreply@fedoraproject.org
The package rpms/golang-github-gdamore-tcell.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/golang-github-gdamore-tcell.git/c....
Change:
-ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
Thanks.
Full change:
============
commit 2e4fb69306a665eb4adceb9e2d81e5bcbb5e2412
Author: Elliott Sales de Andrade <quantum.analyst(a)gmail.com>
Date: Thu Jun 7 02:39:56 2018 -0400
Re-template against More Go Packaging guidelines.
diff --git a/golang-github-gdamore-tcell.spec b/golang-github-gdamore-tcell.spec
index e7079c6..1d8a44c 100644
--- a/golang-github-gdamore-tcell.spec
+++ b/golang-github-gdamore-tcell.spec
@@ -1,61 +1,33 @@
-# Generate devel rpm
-%global with_devel 1
-# Build project from bundled dependencies
-%global with_bundled 0
-# Build with debug info rpm
-%global with_debug 0
-# Run tests in check section
-%global with_check 1
-# Generate unit-test rpm
-%global with_unit_test 1
-
-%if 0%{?with_debug}
-%global _dwz_low_mem_die_limit 0
-%else
-%global debug_package %{nil}
-%endif
-
-
-%global provider github
-%global provider_tld com
-%global project gdamore
-%global repo tcell
-# https://github.com/gdamore/tcell
-%global provider_prefix %{provider}.%{provider_tld}/%{project}/%{repo}
-%global import_path %{provider_prefix}
-%global commit 061d51a604c546b48e92253cb65190d76cecf4c6
-%global shortcommit %(c=%{commit}; echo ${c:0:7})
-%global commitdate 20171124
-
-Name: golang-%{provider}-%{project}-%{repo}
-Version: 1.0.0
-Release: 1%{?dist}
+%global debug_package %{nil} # Don't actually install any built things.
+%global goipath github.com/gdamore/tcell
+Version: 1.0.0
+
+%gometa
+
+%global common_description %{expand:
+Package tcell provides a cell based view for text terminals, like xterm. It was
+inspired by termbox, but differs from termbox in some important ways. It also
+adds substantial functionality beyond termbox.}
+
+Name: %{goname}
+Release: 2%{?dist}
Summary: An alternate terminal package
License: ASL 2.0
-URL: https://%{provider_prefix}
-Source0: https://%{provider_prefix}/archive/v%{version}/%{repo}-%{version}.tar.gz
+URL: %{gourl}
+Source0: %{gosource}
-# e.g. el6 has ppc64 arch without gcc-go, so EA tag is required
-ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
-# If go_compiler is not set to 1, there is no virtual provide. Use golang instead.
-BuildRequires: %{?go_compiler:compiler(go-compiler)}%{!?go_compiler:golang}
+%description
+%{common_description}
-%global _description \
-Package tcell provides a cell based view for text terminals, like xterm. It was \
-inspired by termbox, but differs from termbox in some important ways. It also \
-adds substantial functionality beyond termbox.
-%description %{_description}
-
-%if 0%{?with_devel}
%package devel
Summary: %{summary}
BuildArch: noarch
-%if 0%{?with_check} && ! 0%{?with_bundled}
BuildRequires: golang(github.com/gdamore/encoding)
BuildRequires: golang(github.com/lucasb-eyer/go-colorful)
BuildRequires: golang(github.com/mattn/go-runewidth)
+BuildRequires: golang(github.com/smartystreets/goconvey/convey)
BuildRequires: golang(golang.org/x/text/encoding)
BuildRequires: golang(golang.org/x/text/encoding/charmap)
BuildRequires: golang(golang.org/x/text/encoding/japanese)
@@ -63,152 +35,51 @@ BuildRequires: golang(golang.org/x/text/encoding/korean)
BuildRequires: golang(golang.org/x/text/encoding/simplifiedchinese)
BuildRequires: golang(golang.org/x/text/encoding/traditionalchinese)
BuildRequires: golang(golang.org/x/text/transform)
-%endif
-
-Requires: golang(github.com/gdamore/encoding)
-Requires: golang(github.com/lucasb-eyer/go-colorful)
-Requires: golang(github.com/mattn/go-runewidth)
-Requires: golang(golang.org/x/text/encoding)
-Requires: golang(golang.org/x/text/encoding/charmap)
-Requires: golang(golang.org/x/text/encoding/japanese)
-Requires: golang(golang.org/x/text/encoding/korean)
-Requires: golang(golang.org/x/text/encoding/simplifiedchinese)
-Requires: golang(golang.org/x/text/encoding/traditionalchinese)
-Requires: golang(golang.org/x/text/transform)
-
-Provides: golang(%{import_path}) = %{version}-%{release}
-Provides: golang(%{import_path}/encoding) = %{version}-%{release}
-Provides: golang(%{import_path}/termbox) = %{version}-%{release}
-Provides: golang(%{import_path}/views) = %{version}-%{release}
%description devel
-%{_description}
-
-This package contains library source intended for
-building other packages which use import path with
-%{import_path} prefix.
-%endif
-
-%if 0%{?with_unit_test} && 0%{?with_devel}
-%package unit-test-devel
-Summary: Unit tests for %{name} package
-%if 0%{?with_check}
-#Here comes all BuildRequires: PACKAGE the unit tests
-#in %%check section need for running
-%endif
-
-# test subpackage tests code from devel subpackage
-Requires: %{name}-devel = %{version}-%{release}
-
-%if 0%{?with_check} && ! 0%{?with_bundled}
-BuildRequires: golang(github.com/smartystreets/goconvey/convey)
-%endif
-
-Requires: golang(github.com/smartystreets/goconvey/convey)
+%{common_description}
-%description unit-test-devel
-%{_description}
+This package contains library source intended for building other packages
+which use import path with %{goipath} prefix.
-This package contains unit tests for project
-providing packages with %{import_path} prefix.
-%endif
%prep
-%setup -q -n %{repo}-%{version}
+%gosetup -q
-%build
-mkdir -p src/%{provider}.%{provider_tld}/%{project}/
-ln -s $(pwd) src/%{provider}.%{provider_tld}/%{project}/%{repo}
-export GOPATH=$(pwd):%{gopath}
+%build
+%gobuildroot
for f in boxes mouse unicode; do
- %gobuild -o bin/${f} _demos/${f}.go
+ %gobuild -o _bin/${f} _demos/${f}.go
done
+
%install
-# source codes for building projects
-%if 0%{?with_devel}
-install -d -p %{buildroot}/%{gopath}/src/%{import_path}/
-echo "%%dir %%{gopath}/src/%%{import_path}/." >> devel.file-list
-# find all *.go but no *_test.go files and generate devel.file-list
-for file in $(find . \( -iname "*.go" -or -iname "*.s" \) \! -iname "*_test.go") ; do
- dirprefix=$(dirname $file)
- install -d -p %{buildroot}/%{gopath}/src/%{import_path}/$dirprefix
- cp -pav $file %{buildroot}/%{gopath}/src/%{import_path}/$file
- echo "%%{gopath}/src/%%{import_path}/$file" >> devel.file-list
-
- while [ "$dirprefix" != "." ]; do
- echo "%%dir %%{gopath}/src/%%{import_path}/$dirprefix" >> devel.file-list
- dirprefix=$(dirname $dirprefix)
- done
-done
-%endif
-
-# testing files for this project
-%if 0%{?with_unit_test} && 0%{?with_devel}
-install -d -p %{buildroot}/%{gopath}/src/%{import_path}/
-# find all *_test.go files and generate unit-test-devel.file-list
-for file in $(find . -iname "*_test.go") ; do
- dirprefix=$(dirname $file)
- install -d -p %{buildroot}/%{gopath}/src/%{import_path}/$dirprefix
- cp -pav $file %{buildroot}/%{gopath}/src/%{import_path}/$file
- echo "%%{gopath}/src/%%{import_path}/$file" >> unit-test-devel.file-list
-
- while [ "$dirprefix" != "." ]; do
- echo "%%dir %%{gopath}/src/%%{import_path}/$dirprefix" >> devel.file-list
- dirprefix=$(dirname $dirprefix)
- done
-done
-%endif
+%goinstall
-%if 0%{?with_devel}
-sort -u -o devel.file-list devel.file-list
-%endif
%check
-%if 0%{?with_check} && 0%{?with_unit_test} && 0%{?with_devel}
-%if ! 0%{?with_bundled}
-export GOPATH=%{buildroot}/%{gopath}:%{gopath}
-%else
-# No dependency directories so far
-
-export GOPATH=%{buildroot}/%{gopath}:%{gopath}
-%endif
+%gochecks
-%if ! 0%{?gotest:1}
-%global gotest go test
-%endif
-%gotest %{import_path}
-%endif
-
-#define license tag if not already defined
-%{!?_licensedir:%global license %doc}
-
-
-%if 0%{?with_devel}
%files devel -f devel.file-list
+%doc README.md AUTHORS
%license LICENSE
-%doc AUTHORS README.md
-%dir %{gopath}/src/%{provider}.%{provider_tld}/%{project}
-%endif
-%if 0%{?with_unit_test} && 0%{?with_devel}
-%files unit-test-devel -f unit-test-devel.file-list
-%license LICENSE
-%doc AUTHORS README.md
-%endif
%changelog
-* Fri Mar 16 2018 Elliott Sales de Andrade <quantum.analyst(a)gmail.com> 1.0.0-1
+* Thu Jun 07 2018 Elliott Sales de Andrade <quantum.analyst(a)gmail.com> - 1.0.0-2
+- Re-template against More Go Packaging guidelines
+
+* Fri Mar 16 2018 Elliott Sales de Andrade <quantum.analyst(a)gmail.com> - 1.0.0-1
- Update to first released version
- Check build of demos
* Wed Feb 07 2018 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.2.20170807gitd55f61c
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
-* Sat Aug 19 2017 Elliott Sales de Andrade <quantum.analyst(a)gmail.com> 0-0.1.20170807gitd55f61c
+* Sat Aug 19 2017 Elliott Sales de Andrade <quantum.analyst(a)gmail.com> - 0-0.1.20170807gitd55f61c
- Add commit date to revision
-* Fri Aug 18 2017 Elliott Sales de Andrade <quantum.analyst(a)gmail.com> 0-0.1.gitd55f61c
+* Fri Aug 18 2017 Elliott Sales de Andrade <quantum.analyst(a)gmail.com> - 0-0.1.gitd55f61c
- Initial package for Fedora
5 years, 11 months