ruby-c2pa 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/lib/c2pa/error.rb ADDED
@@ -0,0 +1,6 @@
1
+ module C2PA
2
+ class Error < StandardError; end
3
+ class SigningError < Error; end
4
+ class ReadError < Error; end
5
+ class InvalidManifestError < Error; end
6
+ end
@@ -0,0 +1,3 @@
1
+ module C2PA
2
+ VERSION = "0.1.0"
3
+ end
data/lib/c2pa.rb ADDED
@@ -0,0 +1,59 @@
1
+ require "json"
2
+ require_relative "c2pa/version"
3
+ require_relative "c2pa/error"
4
+ require "c2pa/c2pa_native"
5
+
6
+ module C2PA
7
+ # Sign a file with a C2PA manifest.
8
+ #
9
+ # @param file [String] path to the input file
10
+ # @param certificate [String] path to a PEM-encoded X.509 certificate (chain)
11
+ # @param key [String] path to a PEM-encoded private key
12
+ # @param output [String] path for the signed output; defaults to in-place
13
+ # @param algorithm [String] signing algorithm (default: "es256")
14
+ # @param manifest [Hash] manifest definition; omit for a minimal default
15
+ # @return [String] the output path
16
+ #
17
+ # @example In-place signing
18
+ # C2PA.sign(file: "photo.jpg", certificate: "cert.pem", key: "key.pem")
19
+ #
20
+ # @example With explicit output and manifest
21
+ # C2PA.sign(
22
+ # file: "photo.jpg",
23
+ # output: "photo_signed.jpg",
24
+ # certificate: "cert.pem",
25
+ # key: "key.pem",
26
+ # algorithm: "ps256",
27
+ # manifest: { title: "My Photo", assertions: [] }
28
+ # )
29
+ def self.sign(file:, certificate:, key:, output: nil, algorithm: "es256", manifest: nil)
30
+ destination = output || file
31
+ manifest_json = manifest ? JSON.generate(manifest) : nil
32
+
33
+ Native.sign_file(file, destination, certificate, key, algorithm, manifest_json)
34
+ rescue RuntimeError => e
35
+ raise SigningError, e.message
36
+ end
37
+
38
+ # Read the C2PA manifest embedded in a signed file.
39
+ #
40
+ # @param file [String] path to the signed file
41
+ # @return [Hash] parsed manifest JSON
42
+ # @raise [C2PA::ReadError] if the file has no valid manifest
43
+ #
44
+ # @example
45
+ # manifest = C2PA.read(file: "photo_signed.jpg")
46
+ # puts manifest["title"]
47
+ def self.read(file:)
48
+ JSON.parse(Native.read_file(file))
49
+ rescue RuntimeError => e
50
+ raise ReadError, e.message
51
+ end
52
+
53
+ # Return the version of the underlying c2pa-rs SDK.
54
+ #
55
+ # @return [String]
56
+ def self.sdk_version
57
+ Native.sdk_version
58
+ end
59
+ end
data/ruby-c2pa.gemspec ADDED
@@ -0,0 +1,25 @@
1
+ require_relative "lib/c2pa/version"
2
+
3
+ Gem::Specification.new do |spec|
4
+ spec.name = "ruby-c2pa"
5
+ spec.version = C2PA::VERSION
6
+ spec.authors = [`git config user.name`.strip]
7
+ spec.email = [`git config user.email`.strip]
8
+ spec.summary = "Ruby bindings for the c2pa content authenticity library"
9
+ spec.description = "Embed and verify C2PA content provenance and authenticity credentials in images, video, and audio files. Ruby bindings for the official Rust c2pa-rs library."
10
+ spec.license = "MIT"
11
+ spec.homepage = "https://github.com/carlosrodriguez/ruby-c2pa"
12
+ spec.metadata["source_code_uri"] = spec.homepage
13
+
14
+ spec.files = Dir["lib/**/*.rb", "ext/**/*.{rs,toml,rb}", "Rakefile", "*.gemspec", "LICENSE", "README.md"]
15
+ spec.require_paths = ["lib"]
16
+ spec.extensions = ["ext/c2pa_native/extconf.rb"]
17
+
18
+ spec.required_ruby_version = ">= 3.0"
19
+
20
+ spec.add_dependency "rb_sys", "~> 0.9"
21
+
22
+ spec.add_development_dependency "rake-compiler", "~> 1.2"
23
+ spec.add_development_dependency "minitest", "~> 5.0"
24
+ spec.add_development_dependency "rake", "~> 13.0"
25
+ end
metadata ADDED
@@ -0,0 +1,118 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby-c2pa
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Carlos Rodriguez
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: rb_sys
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '0.9'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '0.9'
26
+ - !ruby/object:Gem::Dependency
27
+ name: rake-compiler
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '1.2'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.2'
40
+ - !ruby/object:Gem::Dependency
41
+ name: minitest
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '5.0'
47
+ type: :development
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '5.0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: rake
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '13.0'
61
+ type: :development
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '13.0'
68
+ description: Embed and verify C2PA content provenance and authenticity credentials
69
+ in images, video, and audio files. Ruby bindings for the official Rust c2pa-rs library.
70
+ email:
71
+ - carlos@eddorre.com
72
+ executables: []
73
+ extensions:
74
+ - ext/c2pa_native/extconf.rb
75
+ extra_rdoc_files: []
76
+ files:
77
+ - LICENSE
78
+ - README.md
79
+ - Rakefile
80
+ - ext/c2pa_native/Cargo.toml
81
+ - ext/c2pa_native/extconf.rb
82
+ - ext/c2pa_native/src/lib.rs
83
+ - ext/c2pa_native/target/release/build/oid-registry-c350c75504c969dc/out/oid_db.rs
84
+ - ext/c2pa_native/target/release/build/pix-f303ab89d734032b/out/gamma_lut.rs
85
+ - ext/c2pa_native/target/release/build/serde-2e9abb4d9d73cae4/out/private.rs
86
+ - ext/c2pa_native/target/release/build/serde-f471616b462b0caf/out/private.rs
87
+ - ext/c2pa_native/target/release/build/serde_core-2b94e9134dc44065/out/private.rs
88
+ - ext/c2pa_native/target/release/build/serde_core-3dc945fa0ab21dd5/out/private.rs
89
+ - ext/c2pa_native/target/release/build/thiserror-a1f4c63469c326b9/out/private.rs
90
+ - ext/c2pa_native/target/release/build/typenum-4eb7d34b9fb695ef/out/tests.rs
91
+ - ext/c2pa_native/target/release/build/typenum-b8de96984639a942/out/tests.rs
92
+ - lib/c2pa.rb
93
+ - lib/c2pa/error.rb
94
+ - lib/c2pa/version.rb
95
+ - ruby-c2pa.gemspec
96
+ homepage: https://github.com/carlosrodriguez/ruby-c2pa
97
+ licenses:
98
+ - MIT
99
+ metadata:
100
+ source_code_uri: https://github.com/carlosrodriguez/ruby-c2pa
101
+ rdoc_options: []
102
+ require_paths:
103
+ - lib
104
+ required_ruby_version: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: '3.0'
109
+ required_rubygems_version: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ requirements: []
115
+ rubygems_version: 4.0.3
116
+ specification_version: 4
117
+ summary: Ruby bindings for the c2pa content authenticity library
118
+ test_files: []