5 stable releases
2.0.1 | Oct 30, 2024 |
---|---|
2.0.0 | Jul 29, 2024 |
1.2.1 |
|
1.1.0 | Dec 13, 2023 |
1.0.0 | Dec 5, 2023 |
#78 in No standard library
357 downloads per month
Used in komac
10KB
147 lines
Package Family Name
A Rust library for calculating MSIX Package Family Name values.
This is a #![no_std]
library.
Every MSIX application has a package family name value, which looks a bit like AppName_zj75k085cmj1a
. This value can
easily be found by running Get-AppxPackage <name>
in PowerShell for an installed MSIX package and scrolling to
PackageFullName
.
However, we can work out a package family name value without needing to install the package at all. That's where this library comes into play.
Usage
Add this to your Cargo.toml
:
[dependencies]
package-family-name = "2"
let package_family_name = PackageFamilyName::new("AppName", "Publisher Software"); // AppName_zj75k085cmj1a
How a package family name is calculated
In short, a package family name is made up of two parts:
- Identity name (
AppName
) - Identity publisher (
Publisher Software
)
These steps are then taken:
- UTF-16 encode the identity publisher
- Calculate a SHA256 hash of the encoded publisher
- Take the first 8 bytes of the hash
- Encode the result with Douglas Crockford Base32
- Join the identity name and the encoded value with an underscore (
AppName_zj75k085cmj1a
)
Why would I need to calculate a package family name?
Whilst this is a niche library, there are use cases. For example, when submitting an MSIX package to winget-pkgs, a package family name value is a required as part of the manifest.
Acknowledgements
@marcinotorowski has produced a step by step explanation of how to calculate the hash part of the package family name. This post can be found here.
License
Licensed under either of:
- Apache License, Version 2.0, (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Dependencies
~1.5MB
~27K SLoC